频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

WCF体验之旅(6):在Winform Application中调用Duplex Service出现Timeout Exception的原因和解决方案

来源:博客园 作者:Artech 出处:巧巧读书 2008-03-18 进入讨论组
上一页 1 2 3 

方案2:采用One-way的方式调用Service 和Callback,既然是因为Exception发生在不同在规定的时间内不能正常地收到对应的Reply,那种我就 允许你不必收到Reply就好了——实际上在本例中,对于Add方法,我们根本就不需要有返回结果,我们完全可以使用One-way的方式调用Operation。在这种情况下,我们只需要改变DuplexCalculator和CalculatorCallback的Service Contract定义就可以了。

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;

namespace Artech.DuplexWCFService.Contract
{
[ServiceContract(CallbackContract = typeof(ICalculatorCallback))]
public interface IDuplexCalculator
{
[OperationContract(IsOneWay =true)]
void Add(double x, double y);
}
}


从Message Exchange的角度讲,这种方式实际上是采用下面一种消息交换模式(MEP):

WCF体验之旅(6):在Winform Application中调用Duplex Service出现Timeout Exception的原因和解决方案(图四)
图4

进一步地,由于Callback也没有返回值,我们也可以把Callback操作也标记为One-way。

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;

namespace Artech.DuplexWCFService.Contract
{
//[ServiceContract]
public interface ICalculatorCallback
{
[OperationContract(IsOneWay = true)]
void  ShowResult(double x, double y, double result);
}
}

那么现在的Message Exchange成为下面一种方式:

WCF体验之旅(6):在Winform Application中调用Duplex Service出现Timeout Exception的原因和解决方案(图五)
图5

实现证明这两种方式也是可行的。

4、疑问

虽然直到现在,所有的现象都说得过去,但是仍然有一个问题不能得到解释:如果是因为Winform的主线程不能正常地接受来自Service的Callback才导致了Timeout Exception,那为什么Callback操作能过正常执行呢?而且通过我的实验证明他基本上是在抛出Exception的同时执行的。(参考第2个截图)

http://www.qqread.com/net-case/j401805.html 更多文章 更多内容请看数字化校园网解决方案大型实用解决方案专题应用解决方案专题,或进入讨论组讨论。
上一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章