2009-07-15 5 views
2

J'ai un xml fichier long le contenu du fichier sont ci-dessous:FaultException lors de l'envoi d'une grande quantité de données dans WCF?

<?xml version="1.0" encoding="utf-8"?> 
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <a:Action s:mustUnderstand="1">http://example.org/person</a:Action> 
    </s:Header> 
    <s:Body> 
     <OrderDataBDO xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.datacontract.org/2004/07/BasWare.OM.BusinessDataObjects"> 
      <selected i:type="x:boolean" xmlns="">false</selected> 
      <isSaved i:type="x:boolean" xmlns="">false</isSaved> 
      <metadata i:nil="true" xmlns=""/> 
      <hasUnsavedValues i:type="x:boolean" xmlns="">false</hasUnsavedValues> 
      <hasChanged i:type="x:boolean" xmlns="">false</hasChanged> 
      <defaultResourceId i:type="x:string" xmlns="">BWRc.OM.BUSINESSOBJECTS.ORDERDATABDO.ORDER_DATA</defaultResourceId> 
      <_x0031_ xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:ADate" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
       <_x0034_ i:nil="true"/> 
       <_x0035_ i:type="x:boolean">true</_x0035_> 
       <_x0036_ i:type="x:dateTime">1753-01-01T12:00:00</_x0036_> 
       <_x0037_ i:type="x:string">d</_x0037_> 
       <_x0038_ i:type="x:string">ActualDeliveryDate</_x0038_> 
      </_x0031_> 
      <_x0032_ xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:AString" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
       <_x0034_ i:nil="true"/> 
       <_x0035_ i:type="x:boolean">true</_x0035_> 
       <_x0036_ i:type="x:string"/> 
       <_x0037_ i:nil="true"/> 
       <_x0038_ i:type="x:string">BuyerCode</_x0038_> 
      </_x0032_> 
      <_x0033_ xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:AID" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
       <_x0034_ i:nil="true"/> 
       <_x0035_ i:type="x:boolean">true</_x0035_> 
       <_x0036_ i:type="x:string"/> 
       <_x0037_ i:nil="true"/> 
       <_x0038_ i:type="x:string">BuyerId</_x0038_> 
      </_x0033_> 
      <!--etc--> 
      <_x0034_6 xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:AMoney" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
       <_x0034_ i:nil="true"/> 
       <_x0035_ i:type="x:boolean">true</_x0035_> 
       <_x0036_ i:type="x:decimal">0</_x0036_> 
       <_x0037_ i:type="x:string">N2</_x0037_> 
       <_x0038_ i:type="x:string">TaxSum</_x0038_> 
      </_x0034_6> 
      <_x0034_7 xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:AString" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
       <_x0034_ i:nil="true"/> 
       <_x0035_ i:type="x:boolean">true</_x0035_> 
       <_x0036_ i:type="x:string"/> 
       <_x0037_ i:nil="true"/> 
       <_x0038_ i:type="x:string">Text1</_x0038_> 
      </_x0034_7> 
      <_x0034_8 xmlns:d4p1="http://schemas.datacontract.org/2004/07/BasWare.ProductFramework.BDOFramework" i:type="d4p1:AString" xmlns=""> 
       <_x0031_ i:type="x:boolean">false</_x0031_> 
       <_x0032_ i:type="x:boolean">false</_x0032_> 
       <_x0033_ i:type="x:boolean">false</_x0033_> 
      </_x0034_8> 
     </OrderDataBDO> 
    </s:Body> 
</s:Envelope> 
+0

Pourquoi pensez-vous qu'il est nécessaire d'afficher l'intégralité du message? –

+0

Alors, quel est le problème? S'il vous plaît poster l'exception complète. –

+0

merci John, John peut créer un exemple d'application wcf avec une méthode qui prend un paramètre de chaîne et l'imprime. Puis du client s'il vous plaît passer le xml ci-dessus que j'ai posté, et appelez la méthode sur le service, vous verrez l'exception et peut-être aura plus d'idée sur mon problème. Essayez-le. –

Répondre

2

Vous devez définir plusieurs de vos paramètres - jouer avec les valeurs et voir quel travail. Commencez par utiliser la liaison que vous utilisez et modifiez <readerQuotas> (maxStringContentLength, maxArrayLength, maxNameTableCharCount) - si cela fonctionne, c'est bien!

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="LargeMessages"> 
      <readerQuotas maxDepth="32" 
      maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" 
      maxBytesPerRead="4096" 
      maxNameTableCharCount="2147483647" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    </system.serviceModel> 

Si cela ne résout pas votre problème, vous devrez créer votre propre liaison personnalisée dans la configuration, et fixer les limites au niveau des messages aussi bien - quelque chose comme ceci:

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="ExtraLargeMessages"> 
      <textMessageEncoding> 
      <readerQuotas maxDepth="32" 
       maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" 
       maxBytesPerRead="4096" 
       maxNameTableCharCount="2147483647" /> 
      </textMessageEncoding> 
      <httpsTransport 
       maxBufferPoolSize="1048576" 
       maxReceivedMessageSize="1048576" 
       maxBufferSize="1048576"/> 
     </binding> 
     </customBinding> 
    </bindings> 
    </system.serviceModel> 

Espérons que cela aide.

Marc

MISE À JOUR:
Je tryto ajouter ce comportement à votre service, puis appeler la méthode à nouveau. Vous devriez maintenant obtenir des informations d'exception détaillées sur votre client - pouvez-vous nous dire ce que c'est ?? Peut-être est quelque chose de totalement différent .......

Marc

+0

merci marc_s, j'ai essayé tous les réglages mais ça ne marche pas. –

+0

mis à jour avec le comportement "serviceDebug" pour savoir ce qu'est réellement l'erreur. –

0

Changer votre Max Message Size (par exemple, en fonction de votre engagement) sur le client et le serveur comme described here.

Quelque chose d'autre peut mal se passer. Pouvez-vous enable tracing pour WCF et utiliser le trace log viewer pour affiner l'exception?

+0

i ont changé les paramètres comme ci-dessous: mais toujours la même erreur. –

+0

C'est juste un peu plus de 30k de données - pas des valeurs extrêmement élevées ..... –

+0

même avec une valeur de 2147483647 cela ne fonctionne pas. –

0

Peut-être est le nombre d'objets: essayez d'ajouter quelque chose comme ça

<serviceBehaviors> 
    <behavior name="PutTheNameOfYourBehaviorHere"> 
     <dataContractSerializer maxItemsInObjectGraph="10000000" /> 
    </behavior> 
    </serviceBehaviors> 

à votre fichier de configuration.

+0

merci Giulio, Giulio peut créer un exemple d'application wcf avec une méthode qui prend un paramètre de chaîne et l'imprime. Puis du client s'il vous plaît passer le xml ci-dessus que j'ai posté, et appeler la méthode sur le service, vous verrez l'exception et peut-être aura plus d'idée sur mon problème. Essayez-le. –

+0

Voici le message suivant: Le formateur a lancé une exception en essayant de désérialiser le message: Une erreur s'est produite lors de la tentative de désérialisation du paramètre tempuri.org/:msg. Le message InnerException était 'Une erreur s'est produite lors de la désérialisation de l'objet de type System.IO.MemoryStream. Le quota maximal de longueur de tableau (16384) a été dépassé lors de la lecture de données XML. Ce quota peut être augmenté en modifiant la propriété MaxArrayLength sur l'objet XmlDictionaryReaderQuotas utilisé lors de la création du lecteur XML. Ligne 1, position 44708. '. S'il vous plaît voir InnerException pour plus de détails. –

Questions connexes