WCF ERROR: le serveur n'a pas fourni de réponse significative;
svp quelqu'un peut m'aider à trouver ce qui est arrivé. J'ai mon service WCF qui a bien fonctionné, et maintenant tout d'un coup, j'ai cette erreur:
Le serveur ne fournit pas une véritable réponse; cela pourrait être causé par un contrat de discordance, un prématuré de la fermeture de session ou d'un interne
erreur de serveur
Je dois dire que ça fonctionne encore lorsque je sélectionne quelques milliers d'enregistrements, mais lorsque les données est énorme, j'ai cette erreur, même si avant il a bien fonctionné!
private static string ConnString = "Server=127.0.0.1; Port=5432; Database=DBname; User Id=UName; Password=MyPassword;"
DataTable myDT = new DataTable();
NpgsqlConnection myAccessConn = new NpgsqlConnection(ConnString);
myAccessConn.Open();
string query = "SELECT * FROM Twitter";
NpgsqlDataAdapter myDataAdapter = new NpgsqlDataAdapter(query, myAccessConn);
myDataAdapter.Fill(myDT);
foreach (DataRow dr in myDT.Rows)
{
**WHEN I HAVE TOO MANY RECORDS IT STOPS HERE**
...
web.config
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
<httpRuntime maxRequestLength="2147483647" executionTimeout="100000" />
</system.web>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Traces4.svclog"/>
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDBService" closeTimeout="00:30:00"
openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
useDefaultWebProxy="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IDBService" contract="DBServiceReference.IDBService"
name="BasicHttpBinding_IDBService" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
de la configuration du client (Édité)
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IRouteService" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
<binding name="BasicHttpBinding_IDBService" closeTimeout="00:30:00"
openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
transferMode="Buffered" >
<security mode="None" />
</binding>
</basicHttpBinding>
<customBinding>
<binding name="CustomBinding_IRouteService">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService"
contract="BingRoutingService.IRouteService" name="BasicHttpBinding_IRouteService" />
<endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/binaryHttp"
binding="customBinding" bindingConfiguration="CustomBinding_IRouteService"
contract="BingRoutingService.IRouteService" name="CustomBinding_IRouteService" />
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDBService"
contract="DBServiceReference.IDBService" name="BasicHttpBinding_IDBService" />
</client>
</system.serviceModel>
</configuration>
Dans mon fichier scvlog je ne' t obtenir toute exception!
Je n'ai pas d'autre idée de ce que je peux faire pour comprendre où est le problème. Svp quelqu'un peut m'aider!!!
source d'informationauteur Aliya | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Une réponse différente, juste au cas où quelqu'un arrive ici, comme je l'ai fait la recherche d'une réponse générale à la question.
Il semble que le DataContractSerializer qui ne l'âne-le travail est incroyablement méticuleux, mais ne permet pas toujours de passer l'erreur réelle pour le client. Le processus serveur meurt tout de suite après l'échec - d'où aucune erreur ne peut être trouvé. Dans mon cas, le problème était un enum qui a été utilisé comme les drapeaux, mais pas décoré de la [Drapeaux] attribut (pointilleux ou quoi!).
Pour le résoudre j'ai créé une instance de la sérialiseur et inspecté l'erreur dans le débogueur, voici un extrait de code puisque je l'ai à la main.
EDIT: En réponse à une demande dans les commentaires ...
Modifié l'extrait de code pour afficher la méthode d'assistance que j'utilise maintenant. La même qu'avant, mais dans une pratique générique wrapper.
Et pour l'utiliser, au lieu de retourner un objet, de retour de l'objet après l'appel de la méthode d'assistance, de sorte
devient
Toute erreur de sérialisation sont ensuite jetés avant le service cesse de prêter attention, et peuvent donc être analysés dans le débogueur.
Remarque; je ne vais pas vous recommandons de laisser l'appel dans le code de production, c'est la surcharge de la sérialisation et la désérialisation de l'objet, sans aucun avantage réel une fois le code de débogage.
Espère que cela aide quelqu'un - j'ai perdu environ 3 heures à essayer de le retrouver.
Je ne sais pas si c'est vraiment peut être une réponse, mais j'ai essayé de changer dans web.config de
<security mode="None" />
à<security mode="Transport" />
et Cela a fonctionné!!!Je veux faire attention à ce que cette partie ne doit être modifiée que dans web.config et dans la configuration du client reste
<security mode="None" />
parce que, avec des Transports dans les deux Il ne fonctionne pas!Donc après ça, j'ai décidé d'essayer de revenir à
None security
et Il a travaillé pendant quelques minutes, puis s'arrêta de nouveau, et il est revenu de l'erreur:Le serveur ne fournit pas une véritable réponse; cela pourrait être causé par un contrat de discordance, un prématuré de la fermeture de session ou d'une erreur de serveur interne
Il semble donc que la solution dans mon cas est de dans web.config
security mode to Transport
Dans mon cas, je travaille sur une application windows projet de communication avec un Service Web WCF.
Le service web, à l'aide de netTcpBinding était de retourner un objet de Flux de données (une image).
Que les applications windows ne possède pas de fichier de configuration, les valeurs par défaut sont utilisés pour les liaisons. Et une simple extension de la MaxReceivedMessageSize sur le côté client backend code résolu mon problème.
Dans mon cas, je travaille sur une application MVC et j'ai changé
à
et cela a fonctionné! C'est parce que la réponse du serveur web dépasse
maxReceivedMessageSize ="10000000"
,j'ai donc augmenté
maxReceivedMessageSize
àmaxReceivedMessageSize ="70000000"
.Parfois, ce problème est causé par un grand message qui a été coupé en raison de valeurs par défaut dans la liaison.
Vous devez ajouter maxReceivedMessageSize, maxBufferPoolSize et maxBufferSize avec certaines assez grandes valeurs de la liaison dans votre application.fichier de configuration - que devrait faire l'affaire 🙂
Exemple:
Bonne Chance!
Pour moi, c'était un paresseux-chargement de la liste des éléments extraits de la bd.
La WCF récepteur voudrais essayer de les réitérer, ce qui serait d'essayer d'aller à la DB, qui, évidemment, ne pouvait pas travailler.
Dans mon expérience de cette erreur, il suffit de consulter le service de l'ordinateur hôte du journal des événements pour voir ce qui est à la racine d'exception.
Dans BizTalk que nous utilisons pour obtenir ce problème.
Surtout la question va se produire en raison de la taille du message à partir du service. Nous avons donc besoin d'augmenter la taille de la réception du message de 65,356 à 2,365,60. Il a travaillé pour moi.
entrez la description de l'image ici