对WCF服务的异步调用无提示并随机地失败

时间:2012-01-25 11:45:31

标签: .net wcf silverlight web-services

我已经在这个问题上工作了几天,似乎无法找到解决方案:(

我有一个WCF服务的异步调用,它有时会工作,而在其他场合什么都不会做 - 没有呼叫,没有错误,什么都没有。它将在执行我的调用方法(主线程)后停止。 断点已添加到服务方法和自动生成的代理类中。如果我在失败的呼叫中进行调试,则永远不会遇到这些断点。其他时候(当它碰巧工作时)所有断点都将被击中。

我已完全删除该服务并再次添加,但仍然没有运气。 我甚至添加了一个新的服务方法和请求消息对象,希望它是原始的一个怪胎问题,但是我也遇到了与新插入的方法相同的问题。

请注意 - 当我将应用程序发布到虚拟机时,会更频繁地发生此问题。它在我的本地机器上并没有发生太多,但它仍然会发生。

以下是我的代码示例: -

这是对服务的异步调用;

ValidateUpdatesMessageRequest request = new ValidateUpdatesMessageRequest();
_serviceClient.ProcessUpdatesAsync(Request)

服务方法如下所示;

public ValidateUpdatesMessageResponse ProcessUpdates(ValidateUpdatesMessageRequest request){ 
//method body 
}

我还有一个服务接口,看起来像这样;

[OperationContract]
ValidateUpdatesMessageResponse ProcessUpdates(ValidateUpdatesMessageRequest request);

我会提供任何可能有助于引导我走向解决方案的反馈意见。

如果您需要任何进一步的信息,请告诉我。

非常感谢提前!

3 个答案:

答案 0 :(得分:1)

发生这种情况有三个基本原因:

  1. 服务崩溃,因此永远不会发送回复。检查服务器端的日志。
  2. 网络问题阻止了回拨。尝试使用wireshark监控网络流量。
  3. 电话回来了,但没有人在听。发生这种情况时,应该接收回复的代码超出了范围。进行代码审查以查找此问题。
  4. 希望这有帮助。

答案 1 :(得分:1)

我现在已经解决了我的问题。

我想我会为可能遇到同样问题的其他人发布我的解决方案。

在调用异步方法的方法结束时: -

_serviceClient.ProcessUpdatesAsync(request);

我有一个

CleanUp()

打电话给

_serviceClient.CloseAsync();

所以在服务方法运行之前就已经关闭了。

我只是拿了

CleanUp() 

从orginial方法调用服务并将其置于事件完成方法中,这样异步线程在完成时关闭。 现在似乎很明显!

感谢您提出的所有建议和意见,非常感谢!

答案 2 :(得分:0)

有类似的问题。在我的情况下,原因是绑定的 readerQuotas 中的 maxArrayLength 值太低。