Kann nicht verstehen, WCF Fehlermeldung, Hilfe benötigt

Habe ich eine einfache web-service, um Anwendungen zu meine Abfrage CMDB. Die Funktion habe ich bin Probleme mit, funktioniert mit einem kleinen resultset scheitert aber mit einem größeren, was darauf hinweist, dass es etwas in der WCF-service-config, die verhindern, dass es gelingt.

Habe ich eine einfache WinForms-test-app mit einer Service-Referenz auf den web service und eine einzelne Funktion, die ruft die Funktion in Frage stellen.

Den kleineren Ergebnismenge zurückgibt ~120KB von xml, die in Ermangelung größeren Ergebnismenge ist ~2MB. Ich habe versucht, die Erhöhung der Größe der maxReceivedMessageSize und maxStringContentLength ohne Erfolg.

Gibt es einige config habe ich verpasst? Ich würde erwarten, dass eine genauere Fehlermeldung, wenn das war das problem.

Vielen Dank im Voraus,

Nick


Den Fehler, der zurückgegeben wird, ist:

System.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. --->
System.Net.WebException: The underlying connection was closed: The connection was closed unexpectedly.
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ClientReliableChannelBinder`1.RequestClientReliableChannelBinder`1.OnRequest(TRequestChannel channel, Message message, TimeSpan timeout, MaskingMode maskingMode)
   at System.ServiceModel.Channels.ClientReliableChannelBinder`1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode)
   at System.ServiceModel.Channels.ClientReliableChannelBinder`1.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at TestRig.CmdbDataService.ICmdbDataService.GetMonitors(String client)
   at TestRig.CmdbDataService.CmdbDataServiceClient.GetMonitors(String client) in C:\Documents and Settings\nfoster\My Documents\Visual Studio Projects\Virtual Operations Manuals\Trunk\src\TestRig\Service References\CmdbDataService\Reference.vb:line 1480
   at TestRig.Form1.btnGetServers_Click(Object sender, EventArgs e) in C:\Apps\Virtual Operations Manuals\Trunk\src\TestRig\Form1.vb:line 8

Die aufrufende Funktion in der Anwendung ist:

Private Sub btnGetMonitors_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetMonitors.Click
  txtResults.Text = String.Empty
  Dim proxy As CmdbDataService.CmdbDataServiceClient = Nothing
  Try
    proxy = New CmdbDataService.CmdbDataServiceClient("WSHttpBinding_ICmdbDataService")
    Dim monitors As TestRig.CmdbDataService.ConfigurationItems = proxy.GetMonitors(txtClientName.Text)
    proxy.Close()
    For Each monitor In monitors
      txtResults.Text &= monitor.Name & " (" & monitor.TypeName & ")" & vbCrLf
    Next
    txtResults.Text &= monitors.Count & " monitors returned"
  Catch ex As Exception
    If Not IsNothing(proxy) AndAlso proxy.State <> ServiceModel.CommunicationState.Closed Then proxy.Abort()
    txtResults.Text = ex.ToString
  Finally
    proxy = Nothing
  End Try
End Sub

Auf dem Prüfstand-Seite der app.config enthält die folgenden serviceModel:

  <system.serviceModel>
    <diagnostics>
      <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
        logMessagesAtTransportLevel="true" />
    </diagnostics>
    <behaviors />
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_Default" closeTimeout="00:05:00"
          openTimeout="00:05:00" receiveTimeout="00:10:00" sendTimeout="00:05:00"
          maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600">
          <readerQuotas maxDepth="104857600" maxStringContentLength="104857600"
            maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/CmdbServices/DataService.svc/soap12"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_Default"
        contract="CmdbDataService.ICmdbDataService" name="WSHttpBinding_ICmdbDataService">
        <identity>
          <userPrincipalName value="MyMachine\ASPNET" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

und auf der service-Seite im web.config ist:

  <system.serviceModel>
    <diagnostics performanceCounters="Default">
      <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
       logMessagesAtTransportLevel="true" />
    </diagnostics>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="MyCorp.Cmdb.Services.DataService.CmdbDataService">
        <endpoint address="soap12" binding="wsHttpBinding" contract="MyCorp.Cmdb.Services.DataService.ICmdbDataService" />
        <endpoint address="soap11" binding="basicHttpBinding" contract="MyCorp.Cmdb.Services.DataService.ICmdbDataService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  • Ich würde versuchen, die Erhöhung der timeout-Werte.
InformationsquelleAutor Nick | 2009-04-03
Schreibe einen Kommentar