zoukankan      html  css  js  c++  java
  • (学)无论是CallContext还是HttpContext,都不能自动实现数据的跨线程传递?

    最近在弄WCF平台,做了如下工作:
    1、采用泛型方式动态创建WCF客户端代码,以解决客户端与服务端分步开发,直接采用契约接口即可,避免客户端弱化开发阶段服务引用;

        示例垃圾代码
        {

    代码
    1 //服务端点初始化
    2             EndpointAddress epo = new EndpointAddress(new Uri(svcServiceAddress),
    3                                                       EndpointIdentity.CreateDnsIdentity("MyServer"));
    4             WSHttpBinding WShb = new WSHttpBinding("BindingConfiguration");//使用的协议必须与wcf服务端所用的协议相同
    5             //创建通道
    6             ChannelFactory<I> customersFactory = new ChannelFactory<I>(WShb, epo);    

    }
    2、增加了传说中"X509"安全验证;

      示例垃圾代码

      {

    代码
    1  //服务应用受权验证信息
    2             customersFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
    3             customersFactory.Credentials.UserName.UserName = "user";
    4             customersFactory.Credentials.UserName.Password = "pwd";
    5             I i = customersFactory.CreateChannel();

      }
    3、其实我还想把上下文的信息(当前操作人员、终端等信息)传到后台用于日志记录,通过实验采用自己定义消息头的方式

    {

    代码
    1 //系统当前操作人员
    2             OperationContextScope scope = new OperationContextScope(i as IContextChannel);
    3             MessageHeader header = MessageHeader.CreateHeader("ContextObject""http://tempuri.org", ContextInfo);
    4             OperationContext.Current.OutgoingMessageHeaders.Add(header);

    },试验也算成功了。

    4、可是、但是、可但是就在把历史项目进行迁移的时候出问题了,抛出了某些“参数未能绑定”的异常。

    5、后经多方面查找、跟踪、调试,发现在某些调用时“上下文信息”,没了下文,?!!?

    6、这些方法与测试期唯一不同的就是这些方法是采用了异步委托。

    7、本着解决问题、治病求人、先百度后谷歌的方针、思路和序顺,终于查到了一些信息:

        http://www.pin5i.com/showtopic-27165.html
       其中有几名话:在同步调用的情况下,ApplicationContext可以正常工作。但是对于异步调用,当前的上下文信息并不能被传播到另一个线程中去。”

       以及“无论是CallContext还是HttpContext(HttpSessionState最终依附于当前的 HttpContext),都不能自动实现数据的跨线程传递。至于原因,需要从两种不同的CallContext说起。

       当然,后面说起的自然是解决办法,如有朋友遇到同样问题自行去看原贴。

  • 相关阅读:
    《Eclipse中的一些快捷键》
    《Java中的抽象类及抽象类的作用》
    《Java中的不可变类》
    《final修饰基本类型变量和引用类型变量的区别》
    《类成员案例》
    《Java中的单例模式--两种》
    《Java中的自动装箱和拆箱功能.》
    Chrome 经典插件
    Sublimeの虚拟环境(Venv)设置
    HTTP下午茶
  • 原文地址:https://www.cnblogs.com/spymaster/p/1733214.html
Copyright © 2011-2022 走看看