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?