C# 增加传递给调用的超时值,以通过UWP设备请求WCF服务
我能够从测试控制台应用程序向WCF服务发送数据,而不会出现任何错误。WCF测试工具也可以正常工作。但是,当我尝试从我的通用Windows平台应用程序向WCF服务发送相同的字节数组时,出现以下错误: 请求通道在00:01:00之后尝试发送时超时。增加传递给请求调用的超时值或增加绑定上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分 我已经研究了几个小时的解决方案,但我还是无法解决这个问题。我也不认为只向服务发送一个字节数组需要一分钟 以下是ServiceReferences.Designer.ClientConfig文件:C# 增加传递给调用的超时值,以通过UWP设备请求WCF服务,c#,wcf,uwp,C#,Wcf,Uwp,我能够从测试控制台应用程序向WCF服务发送数据,而不会出现任何错误。WCF测试工具也可以正常工作。但是,当我尝试从我的通用Windows平台应用程序向WCF服务发送相同的字节数组时,出现以下错误: 请求通道在00:01:00之后尝试发送时超时。增加传递给请求调用的超时值或增加绑定上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分 我已经研究了几个小时的解决方案,但我还是无法解决这个问题。我也不认为只向服务发送一个字节数组需要一分钟 以下是ServiceReferences.D
<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>
再也没有机会了。例外情况也是一样
我确信它与客户端相关,因为服务响应来自控制台应用程序的调用,正如我在文章开头所描述的。什么可能导致此问题
更新:
我在服务器端没有wcf跟踪错误日志(如预期的)。另一方面,我设法在类实现时设置超时。现在,我在尝试发送字节数组时收到“net\u http\u client\u execution\u error”。这给了我一个线索,设备在试图发送这些类型的数据时无法建立连接
为了更深入地讨论这个问题,我建立了ngrok来测试服务行为。当尝试从服务器检索最小数据时,设备应用程序再次抛出“net\u http\u client\u execution\u error”;但是,如果从测试控制台应用程序调用该方法,则不会出现错误。现在我确信这是一个设备问题,正在研究如何解决它。欢迎提出任何想法。我想你可以试试:
在web.config中设置服务器端绑定后,我必须在UWP客户端中增加sendtimeout,如下所示:
databaseClient = new CategoryDatabase.CategoryServiceClient();
databaseClient.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);
谢谢你的建议。我的服务器sendTimeout设置为10分钟,因此不会出现问题。设备上也没有网络通信错误,因为我可以发送和接收除字节数组以外的所有内容。我最后的机会是WCF跟踪。我已经在WCF service web.config上启用了它,但是我必须等到明天才能看到日志,因为系统管理员不在。如果我能抓住任何有用的东西,我会更新评论。@Doğa Gençer,我面临着类似的问题。你能解决你的问题吗?是的。我已经设法做到了,但我真的不认为这是一个过程。以下是webconfig中的绑定设置。希望有帮助:
databaseClient = new CategoryDatabase.CategoryServiceClient();
databaseClient.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);