前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WCF Service Hosting的线程关联性Mono实现比.NET统一?

WCF Service Hosting的线程关联性Mono实现比.NET统一?

作者头像
张善友
发布2018-01-29 16:28:25
5150
发布2018-01-29 16:28:25
举报
文章被收录于专栏:张善友的专栏张善友的专栏

Mono 3.0.2 基于双工通信的WCF应用 Demo 的讨论中 深蓝医生 提到了一个问题:

楼主,找了几天,终于明白我的程序错误在哪里了,在服务契约上加入下面的接口方法: [OperationContract] double Sub(double x, double y); 这样客户端调用的时候,能够直接得到Sub方法的返回值,但同样功能的服务在mono 上面运行的时候,出现下面的错误: Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object at System.ServiceModel.Description.CallbackDebugBehavior.System.ServiceModel.Description.IEndpointBehavior.ApplyClientBehavior (System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior) [0x00000] in <filename unknown>:0 at System.ServiceModel.Description.ServiceEndpoint.CreateClientRuntime (System.Object callbackDispatchRuntime) [0x00000] in <filename unknown>:0 --------------- 所以,问题出在mono的WCF双工服务中,方法不支持 IsOneWay = false 的情况,也就是服务的双向调用。 ============ 向楼主求解,万分感谢!

这样的方法在Windows 下运行良好,把它放到了Mono环境下不正常了。有时候需要“同步”的回调,这也是合理的需求呀,我把他这个方法进去进行测试:

image
image

然后在服务的实现上加上ServiceBehavir的UseSynchronizationContext 进行设定。UseSynchronizationContext 的默认值为true。

image
image

WCF的service操作默认实现了对Host service的当前线程的SynchonizationContext实现了关联。与Callback操作的线程关联性通过CallbackBehavior的UseSynchronizationContext 进行控制,我们将CalculateService的UseSynchronizationContext 设为false。

客户端的调用代码:

image
image

然后放到Mono上去运行,成功了。

image
image

在Windows From的UI线程下使用的时候是需要明确指定UseSynchronizationContext 为false的,在控制台下是不需要的。在Mono的运行环境都需要明确的指定UseSynchronizationContext 为false。这是否可以说明Mono的实现更加统一呢?

代码下载

相关文章:

WCF 中的同步环境

WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-12-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档