Привет всем. Пару вечеров убил на элементарной настройке WCF клиент-сервера, надеюсь на помощь зала ...
При длительной (более 30 мин.) работе сервера, клиент получает ошибку timeot-а, хотя в конфиге было receiveTimeot="2:0:0" (прочие timeot-ы добавил в процессе поисков решения)! Откуда WCF берет эти "0:30:0" — не могу понять ((. Отладка с такими задержками занимает много времени, и я решил пойти другим путем : установил малые значения timeot-ов, но по их истечении клиент продолжает работать, а после тех же 30-ти мин. вылетает исключение ((.
Предоставляю кусок клиентской настройки :
<appSettings>
<!-- Список серверов -->
<add key="EndPoints" value="tcp_local"/>
</appSettings>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TcpBindingStream" transferMode="Streamed" maxReceivedMessageSize="2147483647" receiveTimeout="0:2:0" sendTimeout="0:2:0" openTimeout="0:0:30" closeTimeout="0:0:10">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior>
<callbackDebug includeExceptionDetailInFaults="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<!-- <identity><certificateReference storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectDistinguishedName" /></identity> -->
<endpoint binding="netTcpBinding" contract="Reports.Common.IReportsService" name="tcp_local" bindingConfiguration="TcpBindingStream" address="net.tcp://<ip>:<port>/Reports" />
<endpoint binding="netTcpBinding" contract="Reports.Common.IReportsService" name="was_local" bindingConfiguration="TcpBindingStream" address="net.tcp://<ip>:<port>/Reports/Service1.svc" />
<endpoint binding="basicHttpBinding" contract="Reports.Common.IReportsService" name="http_local" address="http://<ip>:<port>/Reports/Service1.svc" />
</client>
</system.serviceModel>
И кусок серверной :
<bindings>
<netTcpBinding>
<binding name="TcpBindingStream" transferMode="Streamed" maxReceivedMessageSize="2147483647" sendTimeout="0:2:0" receiveTimeout="0:1:0">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="Reports.Svc.Service1">
<endpoint address="net.tcp://0.0.0.0:<port>/Reports" binding="netTcpBinding" bindingConfiguration="TcpBindingStream" contract="Reports.Common.IReportsService"/>
</service>
</services>
На клиенте фабрика каналов создается так :
var factory = new System.ServiceModel.ChannelFactory<TContract>(this.CurrentValue);
где
this.CurrentValue = "tcp_local";
Сервис хостится на WinForm-приложении.
Заранее благодарен любым мыслям по этому поводу.
ЗЫ
Набросал тестовое приложение по всем канонам MSDN (т.е. импортировал сервис мастером, без общей библиотеки) с привязкой к basicHttpBinding — указанных недостатков не обнаружил ...