积极答复者
异步调用异常退出问题求助

问题
-
我做了个订阅系统,先实现的是下面的绿色代码,没有采用异步订阅,运行都很正常.
[OperationContract(IsOneWay = true)]
void Subscribe(Guid id);try
{
m_proxy.Subscribe(m_guid);
subscribed = true;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
但是,当我修改为下面的红色代码时,采用异步来实现订阅动作,却出现了问题. 服务正常连接断开都正常,但我故意断开客户端网络连接时,当异步订阅时,就没有出现网络访问异常报告,而是报告回调错误System .ServiceModel .Diagnostics.callbackException程序就退出了! 而同步时,会报告网络访问异常报告,程序还是可以使用,不会退出!
请教下! 这个是什么问题啊? 该如何处理?
非常感谢!
try
{
m_proxy.BeginSubscribe(m_guid, OnLinkFuwuqiCompletionStartAutoForBeginSub, null);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
void OnLinkFuwuqiCompletionStartAutoForBeginSub(IAsyncResult asyncResult)
{
m_proxy.EndSubscribe(asyncResult);
subscribed = true;
}
答案
-
Hi,
你描述的问题,我没有接触过。
不过不论你同步测试还是异步测试的时候,都会会有创建代理proxy。我不知道你断开客户端网络连接的时间是如何选择的。
如果你是在创建客户端代理之前就把网络断开,这个应该是直接出错的,因为你proxy无法和服务建立起有效的连接通道chanel。这个时候会出现异常,无法建立连接。
至于异步调用的情况,你已经建立连接的时候,在吧网络断掉,执行异步回调的时候因为无法通过有效的chanel执行回调,也会出现错误。
你可以使用DefaultContract来处理错误,结合try catch,保证程序对错误的良好容错性。
Frank.Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
老徐的博客:http://frank_xl.cnblogs.com- 已标记为答案 Frank Xu LeiModerator 2011年3月4日 12:50
全部回复
-
Hi,
你描述的问题,我没有接触过。
不过不论你同步测试还是异步测试的时候,都会会有创建代理proxy。我不知道你断开客户端网络连接的时间是如何选择的。
如果你是在创建客户端代理之前就把网络断开,这个应该是直接出错的,因为你proxy无法和服务建立起有效的连接通道chanel。这个时候会出现异常,无法建立连接。
至于异步调用的情况,你已经建立连接的时候,在吧网络断掉,执行异步回调的时候因为无法通过有效的chanel执行回调,也会出现错误。
你可以使用DefaultContract来处理错误,结合try catch,保证程序对错误的良好容错性。
Frank.Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
老徐的博客:http://frank_xl.cnblogs.com- 已标记为答案 Frank Xu LeiModerator 2011年3月4日 12:50