Может показаться глупым вопрос, но все в WCF кажется намного сложнее, чем в asmx, как я могу увеличить тайм-аут службы svc?
Вот что у меня есть на данный момент:
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
openTimeout="12:00:00"
receiveTimeout="12:00:00" closeTimeout="12:00:00"
sendTimeout="12:00:00">
</binding>
</basicHttpBinding>
</bindings>
И затем моя конечная точка отображается следующим образом:
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout"
contract="ServiceLibrary.IDownloads">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Точная ошибка, которую я получаю:
Истекло время ожидания канала запроса при ожидании ответа после 00: 00: 59.9990000. Увеличьте значение тайм-аута, передаваемое вызову Request, или увеличьте значение SendTimeout в Binding. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута.
В тестовом клиенте WCF есть значок конфигурации, который содержит конфигурацию времени выполнения моей службы:
Как видите, это не те значения, которые я для него установил? Что я делаю не так?
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDownloads" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
Наилучший способ - изменить любой параметр, который вы хотите в своем коде.
Посмотрите на пример ниже:
using(WCFServiceClient client = new WCFServiceClient ()) { client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 1, 30); }
источник
Конфигурация тайм-аута должна быть установлена на уровне клиента, поэтому конфигурация, которую я установил в web.config, не имела никакого эффекта, инструмент тестирования WCF имеет свою собственную конфигурацию, и именно здесь вам нужно установить тайм-аут.
источник
Недавно получил ту же ошибку, но смог исправить ее, закрыв каждый клиентский вызов wcf. например.
WCFServiceClient client = new WCFServiceClient (); //More codes here // Always close the client. client.Close();
или
using(WCFServiceClient client = new WCFServiceClient ()) { //More codes here }
источник
using
, не удаляя неисправный объект канала. Вот еще один блоггер с подходом, более совместимым сusing
блоками: erwyn.bloggingabout.net/2006/12/09/WCF-Service-Proxy-Helper .