Wcf 需要了解Microsoft服务跟踪查看器日志的帮助吗

Wcf 需要了解Microsoft服务跟踪查看器日志的帮助吗,wcf,web-services,svctraceviewer,Wcf,Web Services,Svctraceviewer,我正在使用Microsoft Service Trace Viewer检查日志中是否存在异常。例外情况是: 接收对…someservice.svc的HTTP响应时出错。 这可能是由于服务端点绑定未使用HTTP协议造成的。 这也可能是由于服务器中止了HTTP请求上下文 (可能是由于服务关闭)。有关详细信息,请参阅服务器日志。 Web服务已经启动并运行,我可以很好地访问它。我正在使用来自同一个Web服务的方法生成多个报告,除了一个之外,其他都很好。(这份报告有很多数据)。我猜这与返回太多数据/超时

我正在使用Microsoft Service Trace Viewer检查日志中是否存在异常。例外情况是:

接收对…someservice.svc的HTTP响应时出错。
这可能是由于服务端点绑定未使用HTTP协议造成的。
这也可能是由于服务器中止了HTTP请求上下文
(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。
Web服务已经启动并运行,我可以很好地访问它。我正在使用来自同一个Web服务的方法生成多个报告,除了一个之外,其他都很好。(这份报告有很多数据)。我猜这与返回太多数据/超时有关,但如何使用Microsoft Service Trace Viewer检查这一点?(我不熟悉这个工具)

这是我的异常字符串:

<ExceptionString>System.ServiceModel.CommunicationException: An error occurred
while receiving the HTTP response to http://someservice.svc. This could be due
 to the service endpoint binding not using the HTTP protocol. This could also
be due to an HTTP request context being aborted by the server (possibly due to
the service shutting down). See server logs for more details. --->

System.Net.WebException: The underlying connection was closed: An unexpected
error occurred on a receive. --->

System.IO.IOException: Unable to read data from the transport connection: An
existing connection was forcibly closed by the remote host. --->

System.Net.Sockets.SocketException: An existing connection was forcibly
closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   --- End of inner exception stack trace ---</ExceptionString>
System.ServiceModel.CommunicationException:发生错误
在接收对的HTTP响应时http://someservice.svc. 这可能是应得的
到未使用HTTP协议的服务端点绑定。这也可能
可能是由于服务器中止了HTTP请求上下文(可能是由于
服务正在关闭)。有关详细信息,请参阅服务器日志。-->
System.Net.WebException:基础连接已关闭:出现意外错误
接收时出错。-->
System.IO.IOException:无法从传输连接读取数据:一个
现有连接已被远程主机强制关闭。-->
System.Net.Sockets.SocketException:强制执行现有连接
被远程主机关闭
位于System.Net.Sockets.Socket.Receive(字节[]缓冲区、Int32偏移量、Int32大小、SocketFlags和SocketFlags)
位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
---内部异常堆栈跟踪的结束---
位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
位于System.Net.PooledStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
在System.Net.Connection.SyncRead(HttpWebRequest请求、布尔userRetrievedStream、布尔probeRead)
---内部异常堆栈跟踪的结束---
在System.Net.HttpWebRequest.GetResponse()中
位于System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan超时)
---内部异常堆栈跟踪的结束---

请帮助,我在这里真的没有任何线索…

要尝试获取更具体的错误,在客户端和服务上启用跟踪,请参阅下面的链接以获取更多信息。拥有.svclog文件后,使用跟踪查看器打开该文件,然后单击以红色突出显示的任何活动以查看详细信息-如果超过WCF限制(如MaxReceivedMessageSize),则该文件应显示在客户端或服务的日志中


我遇到的一个常见原因是DataContractSerializer异常。通常这是我的循环参考

通常,我将在服务中的某个地方留下一个注释代码块,该代码块使用DataContractSerializer手动序列化即将返回的对象。您将从它生成的异常中获得更有用的消息

假设您有一个“value”变量,下面是完成任务的一种方法:

var xs = new DataContractSerializer(value.GetType());
var ms = new MemoryStream();
xs.WriteObject(ms, value);

然后我将执行代码来检查异常。

谢谢您的回答。我刚刚得到了包含更多数据的som dbtables,并设法重现了崩溃。这似乎与MaxReceivedMessageSize有关,但从日志来看,我不确定如何验证这一点。我已经用配置扩展了日志记录。从我的app.config中的“如何打开wcf跟踪”,但我仍然无法在日志中看到任何消息,表明我已超过MaxReceivedMessageSize。是否还需要将日志记录添加到web.config文件?是的,将跟踪添加到web.config,因为这可能是服务器端的错误。