WCF klient server nie można się połączyć

0

System.ServiceModel.EndpointNotFoundException: Nie można się połączyć z net.tcp://localhost:30000/Hello. Próba nawiązania połączenia trwała 0002.0468917. Kod błędu TCP 10061: Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia

Taki komunikat otrzymuje mój program (klient WCF, aplikacja konsolowa). Potrzebuje zrobić tak żeby kod odpowiedzialny za hostowanie usługi WCF znajdował się w class library, nie chce mi to działać, zrobiłem sobie wersje uproszczoną do testów. Jest solucja, ma 3 projekty: Class library zawierająca 3 pliki:

IHello:

 [ServiceContract]
    public interface IHello
    {
        [OperationContract]
        string Hello();
    }

Hello:

 
    [Serializable]
    class Hello:IHello
    {
        string IHello.Hello()
        {
            return "Witaj!";
        }
    }

STartujeTu:

    public class STartujeTu
    {
        public STartujeTu()
        {
            Uri baseAddress = new Uri("net.tcp://192.168.0.244:30000/Hello");
            ServiceHost host = new ServiceHost(typeof(Hello), baseAddress);

            ServiceMetadataBehavior serviceBehavior = new ServiceMetadataBehavior()
            {
                HttpGetEnabled = false
            };

            host.Description.Behaviors.Add(serviceBehavior);
            host.AddServiceEndpoint(typeof(IHello), new NetTcpBinding(), "Hello");
            host.Open();
        }
    } 

2 projekt to Console application z takim kodem:

    class Program
    {
        static void Main(string[] args)
        {
            STartujeTu tu = new STartujeTu();

            Console.ReadKey();
        }
    } 

3 projekt to Console Application (klient) z takim kodem:

static void Main(string[] args)
        {
            var myBinding = new NetTcpBinding();
            var myEndpoint = new EndpointAddress("net.tcp://localhost:30000/Hello");
            var myChannelFactory = new ChannelFactory<IHello>(myBinding, myEndpoint);

            IHello client = null;

            try
            {
                client = myChannelFactory.CreateChannel();
                Console.WriteLine(client.Hello());
                ((ICommunicationObject)client).Close();
            }
            catch(Exception ex)
            {
                if (client != null)
                {
                    ((ICommunicationObject)client).Abort();
                }
            }
        } 

Uruchamiam server, zatrzymuje się na końcu, uruchamiam klienta, linijka:

Console.WriteLine(client.Hello());

wywala wyjątek o treści na samej górze mojego pytania.

Próbowałem manipulować adresem na wszystkie sposoby, czyli zamiast adresu lokalnego podać faktyczny adres IP, raz w kliencie, raz w serwerze, w obu, nic nie pomogło. Co robię źle?

0

A spróbuj wyłączyć firewall

0
ne0 napisał(a):

A spróbuj wyłączyć firewall

Niestety, nie pomogło.

0

Nad tym sie zastanawiam: "net.tcp" w URL masz takie coś, też spróbuj to wywalic dając same IP, jak to nie pomoże to ja już nie wiem co to może być.

0

Przepraszam że tak późno ale byłem chory, nie miałem siły programować. Teraz wracam do zdrowia i znów się za to zabrałem. Usunięcie "net.tcp" i rozpoczęcie adresu od localhost powoduje wyjątek, dla NetTcpBinding początek adresu Endpointa musi zaczynać się od net.tcp. Ktoś jest w stanie pomóc mi z tym problemem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1