2013-04-05 3 views
3

У меня есть хост службы WCF в IIS8, и я хочу использовать привязку net.tcp.IIS8 Не было прослушивание конечных точек в net.tcp:

У меня есть такая конфигурация:

Web.config:

<service behaviorConfiguration="MyBehavior" 
    name="DecryptService.EmailCenterDecryptTCP"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://XX.XX.XX.XX:808/VirtualFolder/Service.svc" /> 
     </baseAddresses> 
    </host> 

    <endpoint address="" 
      binding="netTcpBinding" 
      bindingConfiguration="portSharingBinding" 
      name="MyServiceEndpoint" 
      contract="ServiceNamespace.IService"> 
    </endpoint> 

    <endpoint address="mextcp" 
      binding="mexHttpBinding" 
      bindingConfiguration="" 
      name="MyServiceMexTcpBidingEndpoint" 
      contract="IMetadataExchange" /> 
</service> 

Когда я пытаюсь потреблять услугу в той же машине, IIS8 со следующей конфигурацией работает отлично:

<client> 
     <endpoint address="net.tcp://YY.YY.YY.YY:808/VirtualFolder/Service.svc" 
      binding="netTcpBinding" bindingConfiguration="MyServiceEndpoint" 
      contract="ServiceReference1.IService" name="MyServiceEndpoint" /> 
    </client> 

YY.YY.YY.YY - это локальный IP-адрес машины, но когда я пытаюсь использовать эту услугу на другой машине, меняя YY.YY.YY.YY на внешний IP-адрес устройства (ZZ.ZZ.ZZ.ZZ), который запускается IIS8 I получите следующую ошибку:

There was no endpoint listening at net.tcp://ZZ.ZZ.ZZ.ZZ/VirtualFolder/Service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. 

Любые идеи? Спасибо и извините за мой плохой английский

EDIT:

Я сделал консольное приложение работает на ServiceHost заменяющий IIS и с этой конфигурацией она работает через интернет

var svh = new ServiceHost(typeof (Service)); 
svh.AddServiceEndpoint(typeof (ServiceNamespace.IService), new NetTcpBinding(SecurityMode.None), "net.tcp://serverLocalIp:808"); 
svh.Open(); 

Console.WriteLine("SERVER - Running..."); 
stopFlag.WaitOne(); 

Console.WriteLine("SERVER - Shutting down..."); 
svh.Close(); 

Console.WriteLine("SERVER - Shut down!"); 

Любая идея, что случилось с IIS работает с той же услугой через Интернет? локально работает. Спасибо

ответ

4

Вам также необходимо настроить IIS для получения соединения Net.TCP.

Под номером Advanced Settings вашего приложения IIS, а затем под Enabled Protocols убедитесь, что у вас есть http,net.tcp. Обратите внимание, что нет места, если у вас есть пробел, он не сработает.

http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx

+0

Но если у меня есть место в «HTTP, net.tcp» не должны нарушаться даже для местных звонков? –

+1

Я рассмотрел IIS, и у меня все в порядке. Проблема в том, что если я вызываю службу с того же компьютера, на котором работает IIS8 (localhost), все работает нормально, но когда я вызываю ту же службу за пределами машины, которая запускает IIS, я получаю это error –

+0

Похоже, что брандмауэр блокирует вас тогда. – Middas