Silverlight 客户端和 WCF 服务之间的间歇性通信问题

Posted

技术标签:

【中文标题】Silverlight 客户端和 WCF 服务之间的间歇性通信问题【英文标题】:Intermittent communication problems between Silverlight client and WCF service 【发布时间】:2011-10-13 06:10:08 【问题描述】:

我有一个 Silverlight 4 应用程序,它与运行 IIS 7.5 的服务器进行通信,该服务器承载了我自己的许多 WCF 服务。应用程序在 99% 的时间内运行良好,但用户报告说应用程序每天会冻结几次,或者在应用程序的不同点会生成错误消息。

我开启了 WCF 跟踪,出现以下错误:

<Exception>
  <ExceptionType>System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
  <Message>The number of bytes available is inconsistent with the HTTP Content-Length header.  There may have been a network error or the client may be sending invalid requests.        </Message>
  <StackTrace>
    at System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)
    at System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception&amp; requestException)
    at System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, Action callback)
    at System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result)
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)
    at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
    at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
  </StackTrace>
</Exception>

然后我在用户的机器上运行 Fiddler,发现出现以下错误:

HTTP/1.1 504 Fiddler - Receive Failure
Content-Type: text/html; charset=UTF-8
Connection: close
Timestamp: 18:24:21.941

ReadResponse() failed: The server did not return a response for this request.

从一些研究看来,客户端和服务器之间存在一些通信问题。该服务器是一个虚拟专用服务器,我从来没有遇到过任何问题,并且从查看日志来看,它永远不会耗尽处理器/内存。

我的问题是: 1.我可以做些什么来更详细地跟踪正在发生的事情,或者我可以调整任何与 IIS 或服务器相关的内容以避免此错误 2. 在我的 Silverlight 应用程序中,我是否可以通过某种方式等待特定的时间(例如 30 秒),如果没有收到响应,请取消当前请求并重试

【问题讨论】:

你检查过你的服务方法是否抛出异常吗? Jehof - 服务方法不会抛出异常。您可以在错误发生后进行完全相同的服务方法调用,它会起作用。 你检查过,服务器的事件日志吗? 事件日志中没有错误。 @GaryJoynes - 你有没有发现这个问题,你是如何解决这个问题的? 【参考方案1】:

以下网页解决了类似的问题: Error at WCF Service The number of bytes available is inconsistent with the HTTP Content-Length header

【讨论】:

以上是关于Silverlight 客户端和 WCF 服务之间的间歇性通信问题的主要内容,如果未能解决你的问题,请参考以下文章

SilverLight、WCf 服务、Datetime.Today

WCF 轮询双工绑定和非 Silverlight 客户端

从 Silverlight 到 WCF 的图像文件

Safari和silverlight之间的故事

WCF的替代品[关闭]

如何使用 WCF 调用从客户端 windows phone 8.0 silverlight 返回对象的方法