2012-03-28 3 views
0

Ich rufe einen WCF-Dienst von einer SharePoint-Website an und erhalte einen Fehler auf dem Client mit den folgenden Details, wenn ein relativ großes Objektdiagramm zurückgegeben wird.Vage WCF-Fehler auf der Clientseite beim Verarbeiten eines großen Objektdiagramms

Beim Debuggen des Dienstes kann ich sehen, dass das Objekt korrekt contructs und die Methode das endgültige Objekt (das die Liste der anderen Objekte hat) korrekt zurückgibt. Aber ich bekomme eine Ausnahme auf der Client-Seite beim Aufruf der Service-Methode.

Dieser Dienst/diese Methode funktioniert in den meisten Fällen gut. Im Folgenden sind die Service-Konfigurationen (Entschuldigung für schlechte Formatierung)

Service-Config:

<system.serviceModel> 
<services> 
<service behaviorConfiguration="StandardServiceBehaviour" name="Thd.K2.Web.DataServicesLibrary.Common.Services.AdminService"> 

      <endpoint address="soap" binding="basicHttpBinding" name="AdminService" contract="Thd.K2.Web.DataServicesLibrary.Common.Interfaces.IAdminService" /> 
      <endpoint address="mex" binding="mexHttpBinding" name="Metadata" contract="IMetadataExchange" kind="mexEndpoint" endpointConfiguration="" /> 
     </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
      <behavior name="StandardServiceBehaviour"> 
        <serviceMetadata httpsGetEnabled="false" /> 
        <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior>     
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="customBinding" hostNameComparisonMode="StrongWildcard" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00" maxReceivedMessageSize="1000000" maxBufferSize="1000000" maxBufferPoolSize="1000000" transferMode="Buffered" messageEncoding="Text" textEncoding="utf-8" bypassProxyOnLocal="false" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="2147483647" maxStringContentLength="214748364" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
       <security mode="Transport" /> 
      </binding> 
     </basicHttpBinding> 
     <webHttpBinding> 
      <binding name="webBinding" bypassProxyOnLocal="true" useDefaultWebProxy="false" hostNameComparisonMode="WeakWildcard" sendTimeout="00:05:00" openTimeout="00:05:00" receiveTimeout="00:05:00" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"> 
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
      <security mode="Transport"> 
      </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
</system.serviceModel> 

Client-Methode Dienstinstanz

public static TServiceType GetServiceClient<TServiceType>(ConnStringsType connectionStringType, Page callingPage) 
     where TServiceType : class 
    { 
     var spUrl = GetConnectionString(connectionStringType, callingPage); 

    var result = new BasicHttpBinding(BasicHttpSecurityMode.None);    
     if(spUrl.ToLower().StartsWith("https")) 
     { 
      result = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 
     }    
     result.MaxReceivedMessageSize = int.MaxValue - 1; 
     result.MaxBufferSize = int.MaxValue-1; 
     if (!string.IsNullOrEmpty(spUrl)) 
     { 
      return (TServiceType)Activator.CreateInstance(typeof(TServiceType), result, new EndpointAddress(spUrl)); 
     } 
     return null; 
    } 

Fehler zu erstellen:

Ein Fehler aufgetreten während des Empfangs der HTTP-Antwort an http://localhost:90/AdminService.svc/soap. Dies könnte daran liegen, dass die Service-Endpunktbindung das HTTP-Protokoll nicht verwendet. Dies kann auch daran liegen, dass ein HTTP-Anforderungskontext vom Server abgebrochen wird (möglicherweise aufgrund des Herunterfahrens des Dienstes). Weitere Informationen finden Sie in den Serverprotokollen. Stack:

Server-Stack-Trace: bei System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest Anfrage, HttpAbortReason abortReason) bei System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (Timespan-Timeout) bei System.ServiceModel.Channels.RequestChannel.Request (Message Nachricht, Timespan timeout) bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request (Message Nachricht, Timespan timeout) bei System.ServiceModel.Channels.ServiceChannel.Call (String action, Boolean oneway, ProxyOperationRuntime-Operation, Object [] ins, Object [] outs, TimeSpan-Timeout) an System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage method, ProxyOperationRuntime Betrieb) bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke (Sofortnachricht)

Exception erneut ausgelöst bei [0]: bei System.Runtime. Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (Message & MsgData, Int32 Typ) bei IAdminService.GetBlackoutPeriodsByDescription (String lang, String description) bei AdminServiceClient .GetBlackoutPeriodsByDescription (String lang, String Beschreibung) bei EditBlackoutDates.LoadBlackout (String descriptio n)

+0

Haben Sie die Serverprotokolle überprüft wie die Fehlermeldung schlägt? Was sagen Sie? – Randolpho

+0

Ich konnte keinen Fehler/Ausnahme auf der Dienstseite bemerken. – Vashu

Antwort

0

@paramosh - Vielen Dank !!!

, die den Trick tat. Für andere Referenzen habe ich tatsächlich einen nicht-RESTful WCF-Dienst verwendet.Daher modifizierte ich die Lösung, wie unten unten Funktion aufrufen, bevor die Bahn svc Methodenaufruf:

private void ExpandObjectGraphItems(AdminServiceClient svc) 
    { 
     var operations = svc.Endpoint.Contract.Operations; 
     foreach (var operation in operations) 
     { 
      var dataContractBehavior = operation.Behaviors.Find<System.ServiceModel.Description.DataContractSerializerOperationBehavior>(); 
      if (dataContractBehavior != null) 
      { 
       dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue; 
      } 
     } 
    } 

hinzugefügt folgende Attribut Config Service:

<behavior name="StandardServiceBehaviour"> 
       <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
Verwandte Themen