• 关于OperationContext类


    今天在学习WCF的时候,看到了这个没有接触过的类,于是就在MSDN上面学习了一下。下面是相关的总结。

    MSDN参考:

    OperationContext

    GetCallbackChannel(Of T)

    Current

    作用:提供对服务方法的执行上下文的访问权限。使用服务操作中的 OperationContext 访问当前操作执行环境。 特别是,操作上下文用于访问双工服务中的回调通道、存储整个操作部分的额外状态数据、访问传入消息头和属性以及添加传出消息头和属性。

    重要属性:

    OperationContext.Current

    作用:获取或设置当前线程的执行上下文。使用 Current 属性获取当前方法的执行和消息上下文。

    笔记:关于线程上下文的讨论。 Current属性的主要作用在于获取或设置当前线程的上下文,根据之前的一个“讨论”链接,我个人觉得,应该是获取之前一次此线程执行过程中的内容,设置当前线程以及之后再次执行的当前线程。应该类似于保证当前所操作的内容,就是我所需要的内容,而不是“前一个其他线程”所执行的内容。毕竟不同线程的执行,可能产生的结果很多。

    重要方法:

    OperationContext.GetCallbackChannel(Of T)

    作用:获取调用当前操作的客户端实例的通道。调用 GetCallbackChannel(Of T) 属性以获取通道,使用该通道可以调用调用服务的客户端实例的操作。

    笔记:调用此方法的目的,在于得到调用“当前操作”的“客户端实例”的通道。使用这个通道调用“调用服务的客户端实例”的操作,也就是调用一个客户端实例的某一个操作。配合Current属性,可以理解为获取上一次当前进程执行过程中,所用到的那条通道。

    案例:

    下面的代码示例使用 Current 属性和 GetCallbackChannel(Of T) 方法获取从方法中返回调用方的通道。 此示例中的所有方法都是单向方法,使服务和客户端能够独立地进行双向通信。 在此情况下,示例客户端应用程序在退出前仅需要一次返回调用,但其他客户端(例如 Windows 窗体客户端)可以接收来自服务的任意数量的调用。

    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
    using System.Threading;

    namespace Microsoft.WCF.Documentation
    {
      [ServiceContract(
        Name = "SampleDuplexHello",
    10     Namespace = "http://microsoft.wcf.documentation",
    11     CallbackContract = typeof(IHelloCallbackContract),
    12     SessionMode = SessionMode.Required
    13   )]
    14   public interface IDuplexHello
    15   {
    16     [OperationContract(IsOneWay = true)]
    17     void Hello(string greeting);
    18   }
    19
    20   public interface IHelloCallbackContract
    21   {
    22     [OperationContract(IsOneWay = true)]
    23     void Reply(string responseToGreeting);
    24   }
    25
    26   public class DuplexHello : IDuplexHello
    27   {
    28     public DuplexHello()
    29     {
    30       Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    31     }
    32
    33     ~DuplexHello()
    34     {
    35       Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    36     }
    37
    38     public void Hello(string greeting)
    39     {
    40       Console.WriteLine("Caller sent: " + greeting);
    41       Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
    42       Console.WriteLine("Waiting two seconds before returning call.");
    43       // Put a slight delay to demonstrate asynchronous behavior on client.
    44       Thread.Sleep(2000);
    45       IHelloCallbackContract callerProxy
    46         = OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
    47       string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
    48       Console.WriteLine("Sending back: " + response);
    49       callerProxy.Reply(response);
    50     }
    51   }
    52 }
  • 相关阅读:
    小程序发展史
    ES6内置方法find 和 filter的区别在哪
    微信小程序开发踩坑记录
    小程序导航跳转一不小心踩进的坑
    谈谈如何对后台登陆界面进行渗透
    应急响应学习笔记
    php学习笔记
    代码审计学习笔记
    注入笔记(非sql注入)
    python安全编程学习
  • 原文地址:https://www.cnblogs.com/skyler/p/2217463.html
Copyright © 2020-2023  润新知