EugeniuszT Ответов: 0

Как поделиться сервисом 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."

0 Ответов