• (学)无论是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说起。

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

  • 相关阅读:
    Vue+element tree使用,当弹窗关闭时,this.$refs.tree.setCheckedKeys([])不能清空选中
    npm ERR! A complete log of this run can be found in
    Vue面试题之vue实现MVVM数据绑定
    渐变色的ie兼容
    安徽地图
    数组去重的四种方法
    EF Code First创建数据库
    Code First Migrations更新数据库结构(数据迁移)
    Bootstrap 样式大全
    C#程序中:如何向记事本中写入内容和导出内容
  • 原文地址:https://www.cnblogs.com/spymaster/p/1733214.html
Copyright © 2020-2023  润新知