System.ServiceModel.CommunicationException: la connexion sous-jacente a été fermée
Je suis de la récupération de données à partir d'un service web wcf et lorsque les données sont de plus de 0,2 million d'enregistrements, j'obtiens une exception qui est la suivante:
System.ServiceModel.CommunicationException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. ---> System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
De mon site web.config ressemble à ceci :
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
messageEncoding="Text" textEncoding="utf-8" transferMode="StreamedResponse" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<binding maxReceivedMessageSize="2147483647" allowCookies="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
Je suis sûr que mon service web est en train de récupérer des données à partir de DB. mais il est impossible de transférer mon site web à partir d'où j'ai lancé l'appel. Merci d'avance pour toute aide.
source d'informationauteur user2907164
Vous devez vous connecter pour publier un commentaire.
J'ai eu récemment le même problème avec un service Wcf dans un .Net 4.0 de l'application web. J'ai augmenté la maxItemsInObjectGraph valeur et le serveur n'a pas lancer l'exception plus. La documentation ici dit la valeur maximale par défaut est Int32.MaxValue mais je pense que c'est incorrect, la valeur maximale est de 65535.
L'autre chose que vous pouvez faire est d'activer le suivi. Ceci est un exemple de ce que j'ai dans le web.config:
Si vous double-cliquez sur les Traces.svclog, windows devrait ouvrir le Service Microsoft Visionneuse de Trace.
Si vous testez votre service avec Microsoft Client Test WCF assurez-vous de changer la valeur par défaut de la configuration du client de faire correspondre les paramètres du serveur (ce qui inclut le client endpoint comportement) assurez-vous que le client peut recevoir la réponse du serveur.
J'espère que cette aide.
Faire de votre client basicHttpBinding le même que celui de votre serveur de liaison. C'est une très commune erreur de ne modifier une liaison à la place du serveur et du client liaison.
Si cela fonctionne pas, vous pouvez activer la wcf suivi:
wcf traçage
Qui va vous donner plus d'informations en ce que le sous-fifre problème est.
nous avions une boucle dans notre objet graphique qui étaient de retour. Je sais que ce n'est probablement pas votre problème, mais je vais ajouter ici au cas où quelqu'un d'autre a le même problème. Nous avons eu includeExceptionDetailInFaults activée, mais n'en avaient pas l'erreur de tout client (notre application ou le Client Test WCF). Heureusement, il a montré dans les journaux du serveur, donc nous avons été en mesure de trouver de cette façon.
Nous avons eu Parent -> enfant et de l'enfant -> parent pour les deux sens de navigation, nous avons dû rompre ce lien et plutôt parent -> enfant, et l'enfant a eu une id à la recherche de la mère, puis l'erreur a disparu.
Espère que cela aide quelqu'un!
Ajouter la configuration suivante est à votre service wcf config. Et voir c:\log\Traces.svclog fichier.
Mon exception a été lancer pour ;
Il y avait une erreur lors de la tentative de sérialiser paramètre
Le InnerException message était " valeur d'Enum '0' n'est pas valide pour le type 'ThyCams2014.XrmBase.new_filingstatu " et ne peut pas être sérialisé. S'assurer que les valeurs enum sont présents et sont marquées avec EnumMemberAttribute attribut si le type a DataContractAttribute attrienter code herebute.'. Veuillez voir InnerException pour plus de détails.
Cette déclaration a résolu mon problème: