2009-07-07 12 views
4

Ich habe einen WCF-Dienst mit einem Rückrufvertrag implementiert, den ich versuche, ein Geschäftsobjekt zu senden. Ich habe das Business-Objekt mit Datacontract eingerichtet() und Datamember() Attribute und es enthält die folgende Anzahl von Eigenschaften:Timeout, das auftritt, wenn Geschäftsobjekt über WCF-Rückruf gesendet wird

  • Ints: 3
  • Saiten: 4
  • XElement: 1
  • andere Objekte: 5 (auch mit Datacontract verziert() und Datamember()

Jedes mal, wenn ich versuche, und dieses Objekt über den Rückruf, die Service-Zeiten-out ich habe versucht, die Schaffung andere Objekte mit weniger Eigenschaften senden thro senden. ugh der Rückruf, und kann es durchlaufen, wenn es nur eine Eigenschaft gibt, aber wenn ich mehr als eine Eigenschaft habe, der Dienst Zeitlimit.

Ist in meiner Konfiguration etwas nicht in Ordnung? Ich habe den Standard wsDualHttpBinding, sowie ein customBinding (wie unten angezeigt) ausprobiert und ich habe alle Arten von verschiedenen Einstellungen mit dem maxBufferSize, maxBufferPoolSize und maxReceivedMessageSize versucht. Ich möchte die Zeitüberschreitung nicht erhöhen, da ich möchte, dass dieses Objekt ziemlich schnell bei meinem Client eintrifft. Bitte, jemand hilft mir ... wenn ich noch Haare hätte, hätte ich es jetzt rausgezogen !!!!!

Ich habe meinen Dienst als solche konfiguriert:

Server-Konfiguration:

<customBinding> 
     <binding name="DualBindingConfig"> 
      <reliableSession flowControlEnabled="true" maxPendingChannels="128" /> 
      <compositeDuplex /> 
      <oneWay/> 
      <binaryMessageEncoding/> 
      <httpTransport maxReceivedMessageSize="655360000" maxBufferPoolSize="655360000" /> 
     </binding> 
    </customBinding> 
    <services> 
     <service behaviorConfiguration="Agent_Utility_WCF.Callback.AgentMessagingBehavior" 
      name="Agent_Utility_WCF.Callback.AgentMessaging"> 
      <endpoint address="" binding="customBinding" bindingConfiguration="DualBindingConfig" bindingName="AgentMessaging" contract="Agent_Utility_WCF.Callback.IAgentMessaging"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="Agent_Utility_WCF.Callback.AgentMessagingBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceThrottling maxConcurrentCalls="160" maxConcurrentSessions="100"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 

Client-Konfiguration:

<bindings> 
    <customBinding> 
     <binding name="AgentMessaging_IAgentMessaging"> 
      <reliableSession acknowledgementInterval="00:00:00.2000000" flowControlEnabled="true" 
       inactivityTimeout="00:10:00" maxPendingChannels="4" maxRetryCount="8" 
       maxTransferWindowSize="8" ordered="true" reliableMessagingVersion="Default" /> 
      <compositeDuplex /> 
      <oneWay maxAcceptedChannels="10" packetRoutable="false"> 
       <channelPoolSettings idleTimeout="00:02:00" leaseTimeout="00:10:00" 
        maxOutboundChannelsPerEndpoint="10" /> 
      </oneWay> 
      <binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
       maxSessionSize="2048"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      </binaryMessageEncoding> 
      <httpTransport manualAddressing="false" maxBufferPoolSize="524288" 
       maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
       bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
       realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
       useDefaultWebProxy="true" /> 
     </binding> 
    </customBinding> 
</bindings> 
<client> 
    <endpoint address="http://localhost:666/Callback/AgentMessaging.svc" 
     binding="customBinding" bindingConfiguration="AgentMessaging_IAgentMessaging" 
     contract="AgentMessaging.IAgentMessaging" name="AgentMessaging_IAgentMessaging"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
    </endpoint> 
</client> 

Antwort

5

Folgendes web.config hinzufügen:

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     </listeners> 
    </trace> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
      <listeners> 
       <add name="sdt" 
        type="System.Diagnostics.XmlWriterTraceListener" 
        initializeData= "WcfDetailTrace.svclog" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

Rufen Sie dann Ihre Web-Service-Methode auf. Dies erzeugt WcfDetailTrace.svclog im Stammverzeichnis Ihrer Website. Öffnen Sie diese Datei mit SvcTraceViewer.exe. Dies sollte Ihnen ziemlich viele Informationen darüber geben, was vor sich geht.

+0

Dies führte zu diesen Ergebnissen: Beim Versuch, den Parameter http://tempuri.org/:submitedJob zu serialisieren, trat ein Fehler auf. Die InnerException-Nachricht war 'Type' Utility.DAO.SubmittedJob 'mit dem Datenvertragsnamen' SubmittedJob: http: //schemas.datacontract.org/2004/07/Utility.DAO 'wird nicht erwartet. Fügen Sie statische Typen, die der Liste der bekannten Typen nicht bekannt sind, hinzu, z. B. indem Sie das KnownTypeAttribute-Attribut verwenden oder diese der Liste bekannter Typen hinzufügen, die an DataContractSerializer übergeben werden. Weitere Informationen finden Sie unter InnerException. –

+0

Sie können das KnownTypeAttribute (http://whiletrue.nl/blog/?p=36) verwenden, um alle Klassen aufzulisten, die von Ihrer Basisklasse stammen. –

+0

Ich glaube, ich habe das Problem gefunden ...Im Webservice hatte ich die Methode so definiert, dass ich einen Objekttyp akzeptierte und versuchte, eine Art von SubmitedJob zu senden. Ich änderte den Webservice, um SubmittedJob zu akzeptieren, und der Timeout-Fehler ging weg. –

0

Wie groß sind die anderen Objekte? Wie groß ist beispielsweise der Unterbaum XElement? Der Graph für ein Objekt kann schließlich ziemlich groß werden, insbesondere wenn er andere Objekte aufruft.

Ein einfacher recherchierender Ansatz könnte sein, die [DataMember] Attribute außer vielleicht einer der Zeichenfolgen zu entfernen und sie nacheinander wieder einzuführen, bis sie bricht.

+0

Ich habe mit diesem Ziel ein weiteres Testobjekt mit nur einer Eigenschaft erstellt und über meinen Webservice erfolgreich eingereicht. Ich fügte eine andere Eigenschaft danach hinzu und es würde nicht mehr durchgehen ... –

+0

das XElement ist wirklich ziemlich klein ... –

Verwandte Themen