【发布时间】:2011-04-13 13:10:39
【问题描述】:
编辑
看了一段时间后,我认为这可能是我的开发框的配置问题。但是,在将源代码干净下载到另一台开发机器后,我仍然遇到这个问题。
我有一个异步调用 WCF 服务的 Silverlight 客户端。间歇性地,我会得到一个通用的NotFound 异常。在我调用的几乎所有服务上,异常(众所周知缺乏细节)都会间歇性发生。
事情就是这样。通过明智地设置断点,我已经能够确定服务端正在正常执行。正在检索和返回数据。问题似乎更多地出在客户端。
这就是问题所在...如果我让服务执行超过 10 秒,我可以始终让异常发生。当我这样做时,它永远不会回到我完成的回调。相反,我在服务的客户端 Reference.cs 中得到了异常:
public System.Collections.ObjectModel.ObservableCollection<Project.Ui.SilverLight.ServiceName.ModelName> EndGetService(System.IAsyncResult result) {
object[] _args = new object[0];
System.Collections.ObjectModel.ObservableCollection<roject.Ui.SilverLight.ServiceName.ModelName> _result = ((System.Collections.ObjectModel.ObservableCollection<roject.Ui.SilverLight.ServiceName.ModelName>)(base.EndInvoke("GetService", _args, result)));
return _result;
}
我得到的例外是(不是很有帮助):
System.ServiceModel.CommunicationException was unhandled by user code
Message=The remote server returned an error: NotFound.
StackTrace:
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at Project.Ui.SilverLight.Service.ServicesClient.ServicesClientChannel.EndGetxxxxx(IAsyncResult result)
at Project.Ui.SilverLight.Service.ServicesClient.Project.Ui.SilverLight.Service.IServices.EndGetxxxx(IAsyncResult result)
at Project.Ui.SilverLight.Service.ServicesClient.OnEndGet(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
InnerException: System.Net.WebException
Message=The remote server returned an error: NotFound.
StackTrace:
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
InnerException: System.Net.WebException
Message=The remote server returned an error: NotFound.
StackTrace:
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
InnerException:
绑定信息(名称已更改,但确实与正在执行的服务匹配)
<binding name="Project.WebUI.Services.xxxxxServices.customBinding0" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<binaryMessageEncoding/>
<httpTransport />
</binding>
...
<service name="Project.WebUI.Services.xxxxxServices">
<endpoint address="" binding="customBinding" bindingConfiguration="Project.WebUI.Services.xxxxxServices.customBinding0"
contract="Project.WebUI.Services.xxxxxServices" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
我相信我已经检查了相关的超时。频道的operationTimeout 设置为至少一分钟,ReceiveTimeout 和 OpenTimeout 也是如此。 Silverlight 异步 WCF 调用是否有一些神秘之处需要设置为让它运行超过 10 秒?
【问题讨论】:
-
你为什么称之为超时?它看起来很像
NotFound错误 (404)。 -
但不是“未找到”。这确实是这里发生的超时。如果服务运行时间少于 10 秒,我就是金。这就是让我发疯的原因。我知道服务正在执行,并且我知道它将返回有效数据。只要在 10 秒内完成,就不会出错。
-
@Robaticus:我怀疑 .NET 想象在某处看到 404 错误。
-
@John - 我听到了,但我也用自己的两只眼睛看到了正在发生的事情。 :) 我确实在某处读到过,有时 Silverlight 会将故障掩盖为 NotFound。无论如何,它看起来确实像是某种机器配置问题。 Associate 尝试了相同的代码库,并且运行良好。我可能得暂时改用笔记本电脑编码。
-
@Robaticus:你有没有解决这个问题?如果是,如何?我们遇到同样的问题已经有一段时间了,完全随机的 NotFound 错误,FaultBehavior 没有帮助等等。我的直觉告诉我它也与超时有关,或者至少感觉是这样......
标签: silverlight wcf exception