Как поделиться сервисом WCF на httpbinding ?
Я все еще учусь, и у меня есть проблема с подключением к другому подключенному компьютеру в той же сети к моей простой службе WCF с помощью BasicHttpBinding.
A. Common.dll [ServiceContract] public interface ISampleService { [OperationContract] System.DateTime GetServerTime(); }
B. Server.dll public class SampleService : ISampleService { public DateTime GetServerTime() { return DateTime.Now; } }
C. Console host app static void Main(string[] args) { string endPointAddress = "http://localhost:9942/ServiceTest"; Uri baseAddress = new Uri(endPointAddress); var host = new ServiceHost(typeof(SampleService), baseAddress); BasicHttpBinding httpBinding = new BasicHttpBinding(BasicHttpSecurityMode.None); host.AddServiceEndpoint(typeof(ISampleService), httpBinding, "ISampleService"); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.HttpGetUrl = new Uri(endPointAddress); host.Description.Behaviors.Add(smb); host.Open(); Console.WriteLine("Service up and running at:"); foreach (var ea in host.Description.Endpoints) { Console.WriteLine(ea.Address); } Console.ReadLine(); host.Close(); }
D. Client Proxy public class ProxyTestService : ClientBase<ISampleService>, ISampleService { public ProxyTestService(string address) :base (new BasicHttpBinding(BasicHttpSecurityMode.None),new EndpointAddress($"http://{address}:9942/ServiceTest/ISampleService")) { } public DateTime GetServerTime() { return base.Channel.GetServerTime(); } }
Когда я проверяю на компьютере, где работает хост, это нормально (адрес = localhost).
Однако при подключении с другого компьютера в сети (address = IPCompuerHost) возникают различные проблемы:
Там не было конечной точки прослушивания на http://192.168.1.111:9942/ServiceTest/ISampleService это могло бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. свойство innerexception, если они присутствуют, для более подробной информации.
InnerException: не удается подключиться к удаленному серверу
Вы попытались создать канал для службы, которая не поддерживает фрейминг .Net. Возможно, вы столкнулись с конечной точкой HTTP.
Когда я использую NetTcpBinding, все правильно. Чем отличается BasicHttpBinding??
Что я уже пробовал:
netsh http add urlacl url=http://+:9942/ServiceTest user=Eugeniusz
netsh advfirewall firewall add rule name="ServiceTest9942" dir=in protocol=tcp localport=9942 profile=private remoteip=localsubnet action=allow
netsh interface portproxy add v4tov4 listenport=9942 listenaddress=192.168.1.111 connectport=9942 connectaddress=192.168.1.1 protocol=tcp
F-ES Sitecore
Пробовали ли вы использовать IP-адрес вместо "localhost" в своем серверном приложении?
строка endPointAddress = "http://192.168.1.111:9942/ServiceTest";
EugeniuszT
Да,
У меня есть сообщение в клиентском приложении: "вы попытались создать канал для службы, которая не поддерживает фрейминг .Net. Возможно, вы столкнулись с конечной точкой HTTP."