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


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

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

     

    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

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

    image

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

    客户端的调用代码:

    image

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

    image

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

    代码下载

    相关文章:

    WCF 中的同步环境

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

    作者: 自由、创新、研究、探索……
    出处:http://shanyou.cnblogs.com/
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
    要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任 
    翻译此页
     
    分类: WCFLinux/Mono
  • 相关阅读:
    【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
    【python-leetcode480-双堆】滑动窗口的中位数
    hadoop伪分布式之配置文件说明
    hadoop伪分布式之配置日志聚集
    hadoop伪分布式之配置历史服务器
    微服务框架-Spring Cloud
    Spring Cloud和eureka启动报错 解决版本依赖关系
    Spring Cloud提供者actuator依赖
    Eureka 客户端依赖管理模块
    JDK9之后 Eureka依赖
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2843472.html
Copyright © 2020-2023  润新知