L'augmentation de délai d'attente pour le service web WCF en c#

J'ai actuellement une application qui est l'appel d'un service web sur un serveur pour la recherche. On peut s'attendre à une grande quantité de données à renvoyer, donc une recherche de prendre plus d'une minute est la routine.

Nous avons reçu le message d'erreur ci-dessous pour un tel grand volume de recherche:

Le canal de demande dépassé pendant l'attente d'une réponse, après 00:00:59.7350618. Augmenter la valeur de délai d'expiration passée à l'appel à la Demande ou à l'augmentation de la SendTimeout valeur sur la Liaison. Le temps alloué à cette opération peut avoir été une partie d'un délai plus long.

C'est quelque chose que nous avons vu a demandé à plusieurs questions déjà posté sur StackOverflow, malheureusement, aucune des solutions disponibles m'ont aidé à résoudre le problème ou même être en mesure de configurer le temps par la fenêtre.

Nous avons tous les deux changé de l'application.config pour le client, l'augmentation de tous les délais d'attente impliqué (CloseTimeout, OpenTimeout, ReceiveTimeout, et SendTimeout) et de tout le web.config valeurs pour le service sur le serveur (closeTimeout, openTimeout, et SendTimeout).

Aucun de ces changements n'ont eu aucun effet, je continue à recevoir les minutes de délai d'attente. Aucune idée de pourquoi l'évolution de ces valeurs n'ont aucun effet?

Dans les exemples ci-dessous, nous avons abaissé le temps de nous empêcher d'avoir à attendre la minute pendant les essais.

Web.config:

<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net">
<listeners>
<add name="TraceFile" />
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="TraceFile" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false" />
</diagnostics>
<services>
<service behaviorConfiguration="SearchIndexServiceBehavior" name="SearchIndex.Service">
<endpoint address="" binding="basicHttpBinding" contract="ISearchIndexServices" />
<host>
<timeouts closeTimeout="00:00:10" />
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding closeTimeout="00:00:10" openTimeout="00:00:15" sendTimeout="00:00:20"
receiveTimeout="00:00:25" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="SearchIndexServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.transactions>
<defaultSettings timeout="00:05:00" />
</system.transactions>
</configuration>

app.config

<configuration>
<configSections>
</configSections>
<startup>
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ISearchIndexServices" closeTimeout="00:00:10" openTimeout="00:00:15" receiveTimeout="00:10:00" sendTimeout="00:00:20" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="5242880" maxBufferPoolSize="524288" maxReceivedMessageSize="5242880" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
<readerQuotas maxDepth="32" maxStringContentLength="5242880"maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://MyServer/SearchIndexService/SearchIndexServices.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISearchIndexServices" contract="WFC.ISearchIndexServices" name="BasicHttpBinding_ISearchIndexServices" />
</client>
</system.serviceModel>
</configuration>
Comment êtes-vous connectant à votre service WCF? Êtes-vous à l'aide d'un client généré(Ajouter une Référence de Service), ChannelFactory<T>, ou la mise en œuvre de ClientBase<T>?
La description du problème ici peut par indicateur que votre maxReceivedMessageSize est peut-être trop petite. Bien que le message d'erreur serait plutôt bizarre. Mais je me souviens avoir eu ce problème il y a quelques temps.
Je viens d'ajouter une référence de Service à Monserveur

OriginalL'auteur user1183014 | 2012-02-01