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

Odpowiedz Nowy wątek
2015-02-18 15:46
Wielki Lew
0

System.ServiceModel.EndpointNotFoundException: Nie można się połączyć z net.tcp://localhost:30000/Hello. Próba nawiązania połączenia trwała 00:00:02.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?

Pozostało 580 znaków

2015-02-18 16:03
ne0
0

A spróbuj wyłączyć firewall


Pomogłem? To dobrze :)

Pozostało 580 znaków

2015-02-18 16:07
Wielki Lew
0
ne0 napisał(a):

A spróbuj wyłączyć firewall

Niestety, nie pomogło.

Pozostało 580 znaków

2015-02-18 16:29
ne0
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ć.


Pomogłem? To dobrze :)

Pozostało 580 znaków

2015-02-25 13:44
Wielki Lew
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?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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