Ich habe einen einfachen Web-Service, damit Anwendungen meine CMDB abfragen können. Die Funktion, mit der ich Probleme habe, arbeitet mit einem kleinen Resultset, scheitert aber mit einem größeren, was darauf hinweist, dass es etwas in der WCF-Service-Konfiguration ist, das den Erfolg verhindert.Kann WCF-Fehlermeldung nicht verstehen, Hilfe benötigt
Ich habe eine einfache WinForms-Test-App mit einer Service-Referenz zum Web-Service und einer einzigen Funktion, die die betreffende Funktion aufruft.
Die kleinere Ergebnismenge gibt ~ 120 KB xml zurück, die größere Ergebnismenge ist ~ 2MB. Ich habe versucht, die Größe von maxReceivedMessageSize und maxStringContentLength ohne Erfolg zu erhöhen.
Gibt es einige Config, die ich verpasst habe? Ich würde eine detailliertere Fehlermeldung erwarten, wenn das das Problem wäre.
Vielen Dank im Voraus,
Nick
Der 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 Aufruffunktion 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
On das t est rig Seite der app.config enthält folgende 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 Serviceseite der 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 Timeout-Werte zu erhöhen. –