异步WCF在10秒后在客户端调用超时

Rob*_*cus 6 silverlight wcf exception

编辑

看了一会儿后,我觉得这可能是我开发盒上的配置问题.但是,在将源代码干净地下载到不同的开发机器之后,我仍然遇到了这个问题.

我有一个Silverlight客户端异步调用WCF服务.间歇性地,我会得到一个通用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;
        }
Run Code Online (Sandbox Code Playgroud)

我得到的例外是(不是很有帮助):

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: 
Run Code Online (Sandbox Code Playgroud)

绑定信息(名称已更改,但它们与正在执行的服务匹配)

    <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>
Run Code Online (Sandbox Code Playgroud)

我相信我已经检查了相关的超时.通道operationTimeout设置为至少一分钟,ReceiveTimeout和OpenTimeout也是如此.是否有一些关于Silverlight异步WCF调用的问题需要设置为告诉它超过十秒?

Ken*_*ith 1

在上面的配置文件中,看起来它们来自服务器的配置。您是否也检查过客户端配置?客户端通道上的 SendTimeout 和 ReceiveTimeout 属性均默认为一分钟,但它们可能已被调整或覆盖。当然,您应该检查配置 XML 文件,还应该检查在代码中创建绑定的位置,因为可能在那里设置与配置文件冲突的属性。(在客户端和服务器上。)