首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从WCF返回HttpContext.Current.Cache?

在WCF中,无法直接访问HttpContext.Current.Cache,因为WCF不是在HTTP上下文中运行,因此无法直接访问HttpContext.Current.Cache。但是,您可以使用WCF的自定义行为来实现这一目标。

以下是一个示例,演示如何在WCF中使用自定义行为来访问HttpContext.Current.Cache:

  1. 首先,您需要创建一个自定义行为,该行为将在WCF服务中运行,并且可以访问HttpContext.Current.Cache。
代码语言:csharp
复制
public class CacheBehavior : IServiceBehavior
{
    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
        {
            foreach (EndpointDispatcher endpointDispatcher in dispatcher.Endpoints)
            {
                if (endpointDispatcher.DispatchRuntime != null)
                {
                    endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CacheMessageInspector());
                }
            }
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }
}
  1. 接下来,您需要创建一个自定义消息检查器,该检查器将在WCF服务中运行,并且可以访问HttpContext.Current.Cache。
代码语言:csharp
复制
public class CacheMessageInspector : IDispatchMessageInspector
{
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // 在这里访问HttpContext.Current.Cache
        return null;
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        // 在这里访问HttpContext.Current.Cache
    }
}
  1. 最后,您需要将自定义行为添加到WCF服务的配置文件中。
代码语言:xml<system.serviceModel>
复制
  <behaviors>
   <serviceBehaviors>
      <behavior>
       <CacheBehavior />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

这样,您就可以在WCF服务中使用自定义行为来访问HttpContext.Current.Cache了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

菜菜零学习WCF一(WCF概述)

菜菜刚开始接触WCF,一切都要从零开始,所以在此也记下笔记,以作日后翻看,大家也可以多多指点。   在了解WCF概述之前,我们也先来了解一下,在WCF版本还未进行发布之前,都是使用的什么技术呢?...那么如果使用WCFWCF可使用Web服务进行通信,因此与同样支持SOAP的其他平台(例如基于J2EE的主流应用程序服务器)建的胡曹祖行就变得简单明了。   ...管理对象生存期、定义分布式事务以及企业服务的其他方面的功能现在可以由WCF来提供。任何基于WCF的应用程序都可以使用这些功能。   ...下面我们来简单的创建并调用WCF服务。 1.打开VS开发工具,然后文件→新建项目,再选择WCF服务库如果所示 ? 点击确定后,那么简单的WCF服务即创建成功。直接F5就可看到 ?...那么到此第一个WCF服务的创建到调用就实现了。 第一课我主要了解了什么是WCF服务,以及创建了最简单的WCF服务。

1.3K20

菜菜零学习WCF八(Message类)

前言 本次记录主要记录三个重要的内容: Message类概述 使用Message类创建消息 读取Message类消息 第一部分--Message类概述 Message类是WCF的基本类。...相反,您需要使用WCF服务 模型构造(如数据协定、消息协定和操作协定)来描述传入消息和传出协定。...在以下情况下可能需要使用Message类:     需要一种替代方式来创建传出的消息内容(例如,磁盘上的文件直接创建消息),而不是序列化.NET Framework对象。     ...如果要使用与传入消息相同的协议版本,则可以使用OperaionContext实例(Current属性获取)上的IncomingMessageVersion属性。...IsFault属性在消息为SOAP错误消息时返回true.   IsEmpty属性在消息为空时返回true.

81130

WCF后续之旅(1): WCF如何通过Binding进行通信的

由于WCF的核心还是Communication,这个新的系列就先来讨论WCF如何进行Communication的。...如何你想充分利用WCF提供给我们的扩展性,对Channel Layer的了解基本上是必须的。...chananelFactory.CreateChannel(address); 2: channel.Open(); 创建Request message通过Channel对象发送到Server端,Request方法调用会返回一个...WCF后续之旅: WCF后续之旅(1): WCF如何通过Binding进行通信的 WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel WCF后续之旅(3...:创建一个简单的SOAP Message拦截、转发工具[下篇] WCF后续之旅(14):TCP端口共享 WCF后续之旅(15): 逻辑地址和物理地址 WCF后续之旅(16): 消息是如何分发到Endpoint

908100

菜菜零学习WCF三(配置服务)

在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到服务的地址、服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型。   ...--可使用.NET Framework配置技术对WCF服务进行配置。通常情况下,向承载WCF服务的Intrnet信息服务(IIS)网站的Web.config文件添加XML元素。...最基本的绑定仅指定必须用于连接到终结点的传输协议(如Http).一般来说,绑定包括的有关如何连接到终结点的信息属于以下类别中的一种。   ...--可以勇士CustomBinding对象预先存在的绑定元素创建新的绑定       --也可以通过从Binding绑定派生来创建完全由用户定义的绑定   使用绑定     --使用绑定需要执行两个基本步骤...binding决定了通讯的类型、 安全、如何编码、是否基于session、是否基于事务等等 contract -

78210

菜菜零学习WCF四(承载服务)

我们都知道WCF在运行的时候必须自己提供宿主来承载服务。WCF 本身没有附带宿主,就需要我们自己来依附于宿主而承载WCF服务。 那么现在主要有几种方式来为我们提供WCF的承载呢?...此环境适合开发可通过WCF支持的任何网络协议(HTTP 、net.tcp、net.pipe和net.msmq)进行通信的WCF服务   --IIS承载的好处     -可像处理任何其他任何类型的IIS应用程序...(包括ASP.NET应用程序和ASMX)一样,部署和管理IIS中承载的WCF服务。     ...-当决定在IIS中承载WCF服务时,一定要记住IIS5.1和IIS6.0仅限于HTTP通信。   --部署IIS承载的WCF服务  -1.要确保正确安装IIS和WCF以及WCF激活组建。 ?...选择WCF服务应用程序,添加项目名称后,就会自动生成相应文件 ?

93720

菜菜零学习WCF七(消息协定)

消息协定概述     通常,定义消息的架构时使用数据协定就足够了     有时必须精确控制如何将类型映射到通过网络传输的SOAP消息。     ...消息样式的操作最多具有一个参数和一个返回值,其中参数和返回值的类型都是消息类型;也就是说,这两种类型可直接序列化为指定的SOP消息结构。     ...SOAP1.2中为Role)指定要使用给定标头的节点的统一资源标识符       MustUnderstand指定醋栗标头的节点是否必须理解该标头       Relay指定要将标头中继大下游节点     WCF...在从新版本应用程序向旧版本应用程序发送消息时,系统必需处理额外的标头,同样,反方向操作时系统必需处理缺少的标头    下面的规则适用于标头的版本管理:       WCF不反对缺少标头,相应的成员将保留其默认值...WCF还忽略意外的额外标头,此规则的一种例外情况在传入的SOAP消息中,额外标头的MustUnderstand属性设置为true.在这种情况下,由于存在一个无法处理但必需理解的标头,因此会引发异常。

2.6K41

菜菜零学习WCF十(序列化)

WCF还包括一个伴随序列化程序NetDataContractSerializer。...因此,往返行程是XML到对象实例,然后再返回到XML流。   ...在此默认模式中,对于一个往返行程,可以将数据数据协定的较新版本发送到较旧版本然后再返回到较新版本而不会出现任何损失,前提是数据协定实现IExtensibleDataObject接口。...还请注意,必须ReadObject方法返回的对象强制转换为适当的类型 第四部分--XmlSerializer  WCF还支持XmlSerializer,XmlSerializer类并非专用于WCF,ASP.NET...手动切换到XmlSerializer   将应用程序ASP.NET Web 服务迁移到WCF时,您可能需要重写现有的、与XmlSerializer兼容的类型,而不是创建新的数据协定类型。

1.1K30

WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?

同理,一个WCF服务的监听与执行同样需要通过一个进程来承载。我们将为WCF服务创建或指定一个进程的方式称为服务寄宿(Service Hosting)。...服务寄宿的方式大体分两种:一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿,所有的托管的应用程序均可作为WCF服务的宿主,比如Console应用、Windows Forms...WCF服务描述通过类型System.ServiceModel.Description.ServiceDescription表示,ServiceDescription对象是WCF服务运行时的描述。...客户端行为体现的是WCF如何进行服务调用的方式,而服务端行为则体现了WCF的请求分发方式。...行为是对WCF进行扩展的最为重要的方式,按照行为作用域的不同,WCF的行为大体包含以下四种: 服务行为(Service Behavior):基于服务本身的行为,实现了接口System.ServiceModel.Description.IServiceBehavior

96360

菜菜零学习WCF五(生成客户端)

紧跟着菜菜零学习WCF四(承载服务),我们在此节已经在IIS中发布了此项服务。 下面我们先来了解一下,如何来生成客户端吧。...1.获取服务协定、绑定和地址   --通常,可以通过使用ServiceModel Metadata Utility Tool(Svcutil.exe)完成此操作   服务中下载元数据,并使用您选择的语言将其转换到托管源代码文件中...2.创建一个WCF客户端对象。   --WCF客户端是表示某个WCF服务的一个本地对象,客户端可以使用这种表示形式与远程服务进行通信。   ...--WCF运行时将方法调用转换为消息,然后将这些消息发送到服务,侦听回复,并将这些值作为返回值或out参数(或ref参数)返回WCF客户端对象中 3.调用操作   --创建并配置了客户端对象后,请创建一个...CommunicationException commException) { sc.Abort(); } 4.处理错误   --由操作返回

1.1K20

WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)

通过《实现篇》对WSDL元素和终结点三要素的之间的匹配关系的介绍,我们知道了WSDL的Binding元素来源于终结点的绑定对象,那么这些基于Binding的元数据以及相应的策略断言是如何被写入WSDL的呢...4: void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context); 5: } WsdlExporter...的定义我们知道,无论是调用ExportContract还是ExportEndpoint方法,并不会直接将导出的元数据返回,最终导出的元数据是通过于另外一个额外的方法GetGeneratedMetadata...二、策略导出扩展(Policy Export Extension) 在《WCF技术剖析(卷1)》的第3章对绑定的介绍中,我们说绝大部分WS规范最终都通过绑定实现,或者说,WCF通过定义相应的绑定元素对某个...在WCF元数据结构体系中,通过策略导出扩展实现对WS-Policy策略断言的导出。

57460

我的WCF之旅(9):如何WCF中使用tcpTrace来进行Soap Trace

无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。...我们今天就来讲讲如何WCF中使用tcpTrace这个工具。 首先我们来讲讲tcpTrace实现的基本原理。说的简单点TcpTrace就是一个监听/转发器(Listening/Forwarding)。...对于WCF来说,如果Client要访问Service,一般情况下交互的只有Client和Service,Soap Message直接Client到Service。...Service发送出去,就不能再被该Service所控制,所以Soap来说,它需要具有高度的自描述性(Self-Describing),它自身必须包含所有必须的控制信息来指导任何接收到该Soap的节点如何去处理它...在WCF中通过ClientViaBehavior实现这样的功能,我将在 后面讲到。

97080

WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成

》)、WCF与Unity的集成(参阅《WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成》)以及Unity与PIAB的集成...前一个版本,在新的版本中(EnterLib V4.1与Unity 1.2)中,MS通过Unity对PIAB进行了重新设计与实现,所以我们很有必要重拾着这个话题,谈谈对于新的EnterLib和Unity,如何将...Unity与WCF之间的集成,本质上就是让WCF使用UnityContainer进行服务实例的创建。而WCF框架内部,服务实例的创建同时一个特殊的对象——InstanceProvider。...为了证实PIAB的效果,我在SyncTimeProvider上面应用了CachingCallHandlerAttribute,如果该CallHandler生效的话,方法返回的结果将会被缓存,在缓存过期之前...输出结果中,我们可以清晰地看到,返回的5个返回的时间均是相同的,由此我们可以看出应用才SyncTimeProvider上面的CachingCallHandlerAttribute生效了。

59610

WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)

这两个方法并不直接返回用于承载元数据信息的MetadataSet对象,而是将导出的元数据暂存于元数据转换的上下文中,最终通过GetGeneratedMetadata方法该元数据转换上下文中将导出的元数据提取出来...正是因为WSDL是目前描述Web服务做好的语言,建立WCF终结点与WSDL元素之间的匹配关系,以及基于该匹配关系的元数据导入和导出的实现,是WCF元数据框架体系的一个最为重要的目标。...WSDL文档;GeneratedXmlSchemas则返回导出生成作为描述数据和消息类型的XML Schema。...三、 实例演示:如何通过WsdlExporter导出元数据 为了让读者更见深刻地认识WsdlExporter,我们现在做一个简单的实例演示。我们通过一个简单的控制台(Console)应用作为演示程序。...图2是运行后的截图,图中我们可以看出导出的元数据由6个MetadataSection构成。

73060
领券