zoukankan      html  css  js  c++  java
  • 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)

    欢迎大家扫描下面二维码成为我的客户,为你服务和上云

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/shanyou/p/2841101.html
Copyright © 2011-2022 走看看