(Пожалуйста, прочтите комментарий, так как у меня есть исправление)
Привет,
Я создал службу WCF, которую размещаю в IIS 7.5 в Windows 7 с использованием .net 4.0.
Служба размещена как на http, так и на net.tcp.
- net.tcp: // локальный: 42 / Сервис / MyService.svc
- http://localhost:43/Service/MyService.svc
Я протестировал свой сервис с помощью WcfTestClient, и, похоже, он правильно работает как через basicHttp, так и через netTcp.
Однако, когда я пытаюсь использовать эту службу через свой веб-сайт ASP.NET, я получаю сообщение об ошибке при попытке пройти через nettcp.
Моя клиентская конечная точка выглядит следующим образом
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Generic_HttpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="Generic_Binding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="EndPointHttp" address="http://localhost:43/Service/MyService.svc" binding="basicHttpBinding" bindingConfiguration="Generic_HttpBinding" contract="NameSpace.Services.Contracts.IService"></endpoint>
<endpoint name="EndPoint" address="net.tcp://localhost:42/Service/MyService.svc" binding="netTcpBinding" bindingConfiguration="Generic_Binding" contract="NameSpace.Services.Contracts.IService"></endpoint>
</client>
Now i call the service in the exact same way just swapping my end point name
var factory = new ChannelFactory<IService>(SuppliedEndpointName);
factory.Open();
var proxy = factory.CreateChannel();
var result = proxy.SomeServiceMethod();
Если я передам этому методу basicHttpBinding, он будет работать отлично.
Когда я перейду на nettcp, я сразу же получаю эту ошибку:
Исключение: соединение сокета было прервано. Это может быть вызвано ошибкой при обработке вашего сообщения, превышением времени ожидания приема на удаленном узле или проблемой базового сетевого ресурса. Тайм-аут локального сокета был «00: 01: 00».
Внутреннее исключение: существующее соединение было принудительно закрыто удаленным хостом
Код ошибки: 10054
Пожалуйста, помогите мне, это сводит меня с ума.
Я определенно установил функции активации WCF HTTP и активации NON HTTP.
Я настроил привязку как HTTP, так и net.tcp на разных портах.
Я установил для своих включенных протоколов http, net.tcp в IIS.
Я отключил свой брандмауэр. Я запустил aspnet_regiis -i для .net 4.0
ПОМОЩЬ!
Наконец я обнаружил, что изменение режима безопасности на транспорт решает проблему.
Однако в моей службе для режима безопасности установлено значение «Нет».
Так почему же мой клиент работает только с транспортным режимом безопасности?