Время ожидания службы WCF - PullRequest
6 голосов
/ 05 марта 2012

Есть ли способ установить тайм-аут на стороне службы, чтобы запрос прекратил обработку, если он превышает тайм-аут?Я знаю, что могу определить время запроса на стороне клиента, но это не останавливает обработку запроса на сервере.

Я попытался добавить следующую привязку:

<basicHttpBinding>
    <binding name="timeout" receiveTimeout="00:01:00" closeTimeout="00:01:00" openTimeout="00:01:00" sendTimeout="00:01:00" />
</basicHttpBinding>

Я также попытался добавить следующее в узел system.web (отдельно и вместе с вышеупомянутым):

<httpRuntime executionTimeout="60" /> <!-- timeout after 60 seconds -->

Ответы [ 4 ]

8 голосов
/ 05 марта 2012

Нет встроенного (из коробки) способа сделать это.Все тайм-ауты, которые вы можете установить, связаны с настройками транспорта.Одним словом, вы должны сделать это сами.

Пожалуйста, также посмотрите этот ответ об ограничении времени выполнения WCF.

1 голос
/ 05 марта 2012

Мы можем установить время ожидания на стороне сервера в «Связывании» с помощью:

Binding.ReceiveTimeout

Это время ожидания, которое указывает, как долго служба может ждать от начала получения запроса до обработки сообщения.Это настройка на стороне сервера.Когда вы отправляете в службу большое сообщение, а службе требуется длительное время для обработки, вам необходимо увеличить этот параметр.

http://msdn.microsoft.com/en-us/library/ms731361.aspx

Использование этих двух тайм-аутов должно решить большинство проблем тайм-аута,Однако, когда служба WCF размещается в IIS / ASP.NET, другой параметр также будет управлять временем жизни запроса:

HttpRuntimeSection.ExecutionTimeout

<configuration>
  <system.web>
  <httpRuntime executionTimeout="600"/>
  </system.web>
</configuration>
1 голос
/ 05 марта 2012

Вы можете установить это в привязках сервисов, по ссылке ниже показаны значения, которые нужно установить как на стороне сервиса, так и на стороне клиента.

http://geekswithblogs.net/smyers/archive/2011/10/05/wcf-service-message-timeouts-size-limits-tips-and-tricks.aspx

0 голосов
/ 05 ноября 2012

да, я могу справиться с этим, вы должны настроить свой файл web.config, он выглядит как

<?xml version="1.0" encoding="UTF-8"?>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </modules>
    <directoryBrowse enabled="false" />
</system.webServer>

<system.web>
    <httpModules>
        <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </httpModules>
    <compilation debug="true" targetFramework="4.0"> 
      <assemblies><add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  <httpRuntime executionTimeout="36000"/>
  <!--<sessionState mode="InProc" timeout="36000" />-->
</system.web>


<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

  <bindings>
    <basicHttpBinding>
      <binding name="Sbinding" maxReceivedMessageSize="1500000000" maxBufferSize="1500000000">
        <readerQuotas maxArrayLength="1500000000" maxStringContentLength="1500000000" />
      </binding>
    </basicHttpBinding>

    <webHttpBinding>
      <binding name="Ubinding" maxBufferSize="1500000000" maxBufferPoolSize="1500000000" maxReceivedMessageSize="1500000000" transferMode="Streamed">
        <readerQuotas maxStringContentLength="1500000000" maxArrayLength="1500000000" maxBytesPerRead="1500000000" maxNameTableCharCount="1500000000" />
      </binding>
    </webHttpBinding>

  </bindings>

  <behaviors>
     <serviceBehaviors>
            <behavior name="ClientUpload.Web.UploadService">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>

          <behavior name="ServiceBehaviour">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
          </behavior>
    </serviceBehaviors>

    <endpointBehaviors>
      <behavior name="web">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviors>


  <services>
    <service behaviorConfiguration="ClientUpload.Web.UploadService" name="ClientUpload.Web.Services.UploadService">
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Sbinding" contract="ClientUpload.Web.Services.IUploadService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>

    <service name="ClientUpload.Web.Services.RestService" behaviorConfiguration="ServiceBehaviour">
      <endpoint address="Rest" binding="webHttpBinding" contract="ClientUpload.Web.Services.IService1" behaviorConfiguration="web" bindingConfiguration="Ubinding">
      </endpoint>
    </service>
  </services>             


</system.serviceModel>

-> ->

А ваш файл ServiceReferences.ClientConfig на стороне клиента выглядит как

<configuration>
<system.serviceModel>

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IUploadService" closeTimeout="00:10:00"
                openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
            <binding name="BasicHttpBinding_IUploadService1" closeTimeout="00:10:00"
                openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>

        </basicHttpBinding>
    </bindings>

  <!--<client>
    <endpoint address="http://localhost/ClientUpload.Web_deploy/Services/UploadService.svc"
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUploadService"
      contract="ServiceReference1.IUploadService" name="BasicHttpBinding_IUploadService" />
  </client>-->


  <client>
    <endpoint address="http://localhost:50503/Services/UploadService.svc"
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUploadService1"
      contract="ServiceReference.ClientUpload.Web.Services.UploadService.IUploadService"
      name="BasicHttpBinding_IUploadService1" />
    <endpoint address="http://localhost:50503/Services/UploadService.svc"
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUploadService"
      contract="ServiceReference1.IUploadService" name="BasicHttpBinding_IUploadService" />
  </client>

  <!--<client>
    <endpoint address="http://10.223.211.37:81/ClientUpload/Services/UploadService.svc"
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUploadService"
      contract="ServiceReference1.IUploadService" name="BasicHttpBinding_IUploadService" />        
  </client>-->      

</system.serviceModel>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...