增加传递给通过UWP设备请求WCF服务的调用的timout值

时间:2017-03-27 11:43:36

标签: c# wcf uwp

我可以从我的测试控制台应用程序向我的WCF服务发送数据而不会出现任何错误。 WCF测试工具也可以正常运行。但是当我尝试从通用Windows平台应用程序向WCF服务发送相同的字节数组时,我收到以下错误:

  

请求频道在00:01:00之后尝试发送超时。增加传递给Request的调用的超时值或增加Binding上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分。

我一直在研究解决方案几个小时,但我无法解决这个问题。我也不认为只向服务发送一个字节数组应该花一点时间。

这是ServiceReferences.Designer.ClientConfig文件:

<configuration>
  <configSections>
  </configSections>
  <system.serviceModel>
   <bindings>
    <basicHttpBinding>
     <binding name="IncreasedTimeOut" receiveTimeout="00:10:00" sendTimeout="00:10:00"
             openTimeout="00:10:00" closeTimeout="00:10:00" />
    </basicHttpBinding>
   </bindings>
  <services>
   <service name="DServis.DenemeServis">
    <endpoint
       address="http://***.com/Service.svc" binding="basicHttpBinding"
       bindingConfiguration="IncreasedTimeOut"
       contract="DenemeServis.IService"  />
   </service>
  </services>
 </system.serviceModel>
</configuration>

此外,我还在调用之前在代码隐藏处设置了这些超时值,看看它是否有任何区别:

 _dServis.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);
 _dServis.Endpoint.Binding.CloseTimeout = new TimeSpan(0, 10, 0);
 _dServis.Endpoint.Binding.OpenTimeout = new TimeSpan(0, 10, 0);
 _dServis.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 10, 0);

再一次没有机会。例外是一样的。

我确信它与客户端相关,因为服务会响应来自控制台应用程序的调用,正如我在帖子开头所描述的那样。什么可能导致这个问题?

更新

我在服务器端没有wcf跟踪错误日志(正如预期的那样)。另一方面,我设法在课堂实施中设置超时。现在,我在尝试发送字节数组时得到“net_http_client_execution_error”。这让我知道设备在尝试发送这些类型的数据时无法建立连接。

为了更深入地解决这个问题,我设置了ngrok来测试服务行为。在尝试从服务器检索最小数据时,设备应用程序再次抛出“net_http_client_execution_error”;但是,如果我从测试控制台应用程序调用该方法,则不会出现错误。现在我确定这是一个设备问题,正在研究如何解决它。欢迎任何想法。

2 个答案:

答案 0 :(得分:0)

我想你可以试试:

  1. 增加服务器端的sendTimeout值
  2. 确认您没有网络通信错误。 (最后,禁用快速测试防火墙客户端)。
  3. 启用WCF跟踪以查看您的频道存在的问题

答案 1 :(得分:0)

在web.config中设置服务器端绑定后,我不得不在UWP客户端增加sendtimeout,如下所示:

databaseClient = new CategoryDatabase.CategoryServiceClient();
databaseClient.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);