WCF, странное игнорирование timeout-ов
От: Programmer75 Украина  
Дата: 21.10.15 00:10
Оценка:
Привет всем. Пару вечеров убил на элементарной настройке 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 — указанных недостатков не обнаружил ...
wcf timeout .net c#
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.