WCF Cela pourrait être dû à la point de terminaison de service de liaison de ne pas utiliser le protocole HTTP
Par défaut.aspx.cs
WCFService.Service1Client client = new WCFService.Service1Client();
string stream = client.JsonSerializeFromDatabase();
client.Close();
WCFService.Service1Client client2 = new WCFService.Service1Client();
foreach (WCFService.Person in client2.JsonDeserializeFromDatabase(stream))
Service1.svc.cs
public IList<Person> JsonDeserializeFromDatabase(string value)
{
MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(value));
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Person>));
IList<Person> tableData = (IList<Person>)ser.ReadObject(ms);
ms.Close();
ms.Dispose();
return tableData;
}
IService1.cs
[OperationContract]
IList<Person> JsonDeserializeFromDatabase(string value);
Serveur Web.config
<httpRuntime maxRequestLength="8192"/>
</system.web>
...
<system.serviceModel>
<services>
<service name="TestWCF.Service1" behaviorConfiguration="TestWCF.Service1Behavior">
<endpoint address="" binding="wsHttpBinding" contract="TestWCF.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestWCF.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>
</serviceBehaviors>
Client Web.config
<httpRuntime maxRequestLength="8192"/>
</system.web>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="debuggingBehaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" closeTimeout="00:50:00" openTimeout="00:50:00" receiveTimeout="00:50:00" sendTimeout="00:50:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<reliableSession ordered="true" inactivityTimeout="00:50:00" enabled="false"/>
<security mode="Message">
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="~~~~~/Service1.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1" contract="WCFService.IService1" name="WSHttpBinding_IService1" behaviorConfiguration="debuggingBehaviour">
Exception De L'Information
Type: System.ServiceModel.CommunicationException, Système.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Message: "Une erreur s'est produite lors de la réception de la réponse HTTP ~~~~~/Service1.svc. Cela pourrait être dû à la point de terminaison de service de liaison de ne pas utiliser le protocole HTTP. Cela pourrait aussi être dû à une requête HTTP contexte été interrompue par le serveur (éventuellement à cause de l'arrêt). Voir les journaux du serveur pour plus de détails.
J'ai obtenu cette information d'exception à partir du Serveur visionneuse de trace, donc merci de ne pas me conseiller de mettre des <-système.diagnostics-> tag.
Comme vous pouvez le voir, j'ai augmenté tous la taille de la chose.
Comme ... je ne sais pas pourquoi j'obtiens une erreur lorsque j'appelle JsonDeserializeFromDatabase de flux(stream).
"Une erreur s'est produite lors de la réception de la réponse HTTP ~~~~~/Service1.svc. Cela pourrait être dû à la point de terminaison de service de liaison de ne pas utiliser le protocole HTTP. Cela pourrait aussi être dû à une requête HTTP contexte été interrompue par le serveur (éventuellement à cause de l'arrêt). Voir les journaux du serveur pour plus de détails."
OriginalL'auteur Adrian | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
Moi aussi j'ai connu ce message d'erreur lors du retour des enregistrements d'une base de données dans un service WCF. Ainsi que l'augmentation de maxReceivedMessageSize dans la liaison dans la configuration du client (App.la configuration), un autre problème semble être que la WCF a des problèmes de sérialisation d'Entity Framework objets s'ils ont des relations qui conduisent à la circularité dans leurs graphes d'objets.
J'ai résolu ce problème en retournant copain de classe d'objets (qui sont des copies de la base de données brutes des enregistrements, mais sans liens de parenté) plutôt que les premières classes de base de données eux-mêmes.
Espère que cette aide -
Et POURQUOI ne pas Microsoft à produire de meilleurs messages d'erreur?? Ici, comme dans beaucoup d'autres cas, le message d'erreur donne aucune idée du vrai problème (la sérialisation de la valeur de retour de la WCF en appel)!
OriginalL'auteur patrickjlee
re: WCF & problèmes de la sérialisation d'Entity Framework objets s'ils ont des relations qui conduisent à la circularité dans leurs graphes d'objets. J'avais la même erreur et la réponse fournie par user1956642 et il ne me pointer dans la bonne direction, mais plus tard réalisé que je pouvais sérialiser ces entités par la configuration de la DbContext
Lazy loading est toujours activé, mais je crois que les proxies dynamiques sont utilisés pour le suivi des modifications et de chargement paresseux. Donc, oui ... juste mon 5c
OriginalL'auteur George Albertyn