2013-07-24 5 views
2

У нас возникают проблемы с настройкой netTcp для нашего веб-сервиса WCF, который размещается локально в IIS. Это на Windows 7 и IIS 7 с DotNet 4.0 (VS2012), брандмауэр отключен.Ошибка конфигурации WCF NetTcp

Мы сделали следующие шаги, чтобы настроить netTcp:

  1. В IIS, установите для сайта привязок net.tcp 808: * для Default Web Site
  2. В IIS для нашего веб-сервиса Включенные протоколы «не HTTP, net.Tcp» (без пробелов)
  3. Проверенно net.Tcp адаптер прослушивателя и net.Tcp порта файлообменника работают (переработаны их, а)

Теперь, когда мы бежим NETSTAT -ona мы делаем не вижу листинг для 127.0.0.1:808 - должен ли мы ???

Вот мой Web.config:

<system.web> 
<customErrors mode="Off"></customErrors> 
<compilation debug="true" targetFramework="4.0"></compilation> 
    <identity impersonate="false" /> 
</system.web> 
<system.serviceModel> 
<diagnostics> 
    <messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false" 
    logMessagesAtTransportLevel="false" /> 
</diagnostics> 
<bindings> 
    <netTcpBinding> 
    <binding name="XxxxxxxCommonServiceBinding" /> 
    </netTcpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="XxxxxxxCommonService_Behavior" name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService"> 
    <endpoint address="net.tcp://localhost:808/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc" binding="netTcpBinding" 
       bindingConfiguration="XxxxxxxCommonServiceBinding" name="XxxxxxxCommonNetTcpBinding" 
       contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService" /> 
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="XxxxxxxCommonService_Behavior"> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">  
</serviceHostingEnvironment> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 

А вот App.config:

<system.serviceModel> 
<client> 
    <endpoint name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService" 
      address="net.tcp://localhost/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc" 
      binding="netTcpBinding" 
      bindingConfiguration="XxxxxxxCommonNetTcpBinding" 
      contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService"/> 
</client>  
</system.serviceModel> 

Вот код в моем клиенте, где я пытаюсь вызвать службу:

var endPoint = new EndpointAddress(
      "net.tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc"); 
var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, SendTimeout = TimeSpan.MaxValue }; 
var channel = new ChannelFactory<IXxxxxxCommonService>(binding, endPoint); 
var proxy = channel.CreateChannel() 
var request = new GetDataRequest(); 
var response = proxy.GetData(request); 

В этот момент мы получаем следующую ошибку:

Не удалось подключиться к net.tcp: //127.0.0.1: 809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc. Попытка подключения продолжалась в течение 00:00:00. Код ошибки 10061 TCP: соединение не может быть выполнено, потому что целевой компьютер активно отклонил его 127.0.0.1:809.

Если изменить порт в коде и WebConfig до 808, мы получаем следующую ошибку:

Там не было никакой конечной точки прослушивания в net.tcp: //127.0.0.1/CS.WebService.Xxxxxx.Common. XxxxxxCommonService/XxxxxxCommonService.svc, который может принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Дополнительную информацию см. В InnerException, если имеется. (обратите внимание, не было внутреннего исключения)

Так что мне кажется, что, поскольку netstat -ona не показывает 127.0.0.1:808, что у меня нет надлежащего настроения. Но снова службы Net.Tcp работают и переработаны, и я считаю, что IIS правильно настроен, поэтому не уверен, куда обратиться.

+0

Похоже, что вы настроили трассировку WCF.Я бы удостоверился, что и клиент, и служба включены для трассировки и запуска с файла трассировки клиента, см., Где выходят исключения. Также попробуйте запустить [простой пример netHttpBinding] (http://msdn.microsoft.com/en-us/library/ms752250.aspx) и сравнить рабочую конфигурацию с вашей конфигурацией. –

ответ

1

Перейти к панели управления> Программы и функции> Включить или отключить функции Windows. В следующем диалоговом окне перейдите к записи Microsoft .NET Framework 3.5.1 и включите Windows Communication Foundation Non-HTTP Activation. (Хотя он говорит 3.5.1 - который Win7 построен в каркасе - он работает и для 4.0).

Вы должны увидеть 0.0.0.0:808 в выводе netstat.

+0

У меня был тип в моем клиентском коде для endpointAddress. Я исправил это, и теперь я нахожусь с другой ошибкой. Я делаю soo 0.0.0.0:808, так что кажется, что все в порядке. – 77vetter

+0

Моя ошибка теперь заключается в том, что контракт не разрешает сеанс, но привязка «NetTcpBinding» не поддерживает Datagram. Поэтому я изменил channel.Endpoint.Contract.SessionMode = SessionMode.Allowed, но все равно получаю ту же ошибку. – 77vetter

+0

@ 77vetter: Если вы хотите изменить SessionMode, его следует изменить как на клиенте, так и на сервере. Однако я не уверен, что это решит вашу проблему. Если вы не можете исправить это, вы должны опубликовать новый вопрос, описывающий вашу новую проблему. – YK1

1

Изменено SessionMode.Allowed как на клиенте, так и на сервере, и все начинает работать. У меня также были проблемы с памятью на моем компьютере, поэтому, как только я очистил память и получил правильный сеанс, все хорошо. Поворачивая трассировку, я указал в правильном направлении.

Смежные вопросы