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

利用ASP.NET兼容模式创建支持会话的WCF服务

在ASP.NET兼容模式下创建支持会话的WCF服务,可以利用ASP.NET的会话状态管理功能。以下是实现这一目标的基础概念和相关步骤:

基础概念

  1. WCF服务:Windows Communication Foundation(WCF)是.NET框架中用于构建服务导向应用程序的框架。
  2. ASP.NET兼容模式:允许WCF服务使用ASP.NET的特性,如会话状态、身份验证等。
  3. 会话状态:允许在多个请求之间保持客户端的状态信息。

实现步骤

1. 配置WCF服务以使用ASP.NET兼容模式

首先,需要在服务的配置文件(通常是web.config)中进行相应的设置。

代码语言:txt
复制
<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
        <serviceThrottling maxConcurrentCalls="16" maxConcurrentSessions="10" maxConcurrentInstances="2147483647"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <services>
    <service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
      <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/MyService"/>
        </baseAddresses>
      </host>
    </service>
  </services>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

2. 启用ASP.NET会话状态

在服务类上添加AspNetCompatibilityRequirements属性,并设置为Required

代码语言:txt
复制
[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetData(int value);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class MyService : IMyService
{
    private static Dictionary<string, string> sessionData = new Dictionary<string, string>();

    [OperationContract]
    public string GetData(int value)
    {
        string sessionId = HttpContext.Current.Session.SessionID;
        if (!sessionData.ContainsKey(sessionId))
        {
            sessionData[sessionId] = "Initial Data";
        }
        return sessionData[sessionId];
    }
}

3. 使用HTTP模块管理会话状态

确保在web.config中注册ASP.NET的HTTP模块。

代码语言:txt
复制
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
  </modules>
</system.webServer>

优势与应用场景

  • 优势:利用ASP.NET成熟的会话管理机制,简化了WCF服务的会话状态处理。
  • 应用场景:适用于需要维护客户端状态的服务,如在线购物车、用户登录状态保持等。

可能遇到的问题及解决方法

  1. 会话状态丢失:确保web.config中的aspNetCompatibilityEnabled设置为true,并且HTTP模块正确注册。
  2. 并发问题:使用线程安全的集合来存储会话数据,如ConcurrentDictionary
代码语言:txt
复制
private static ConcurrentDictionary<string, string> sessionData = new ConcurrentDictionary<string, string>();

通过以上步骤,可以在ASP.NET兼容模式下成功创建并运行支持会话的WCF服务。

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

相关·内容

WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side...)模式和ASP.NET兼容模式。...由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一样的方式处理基于.svc的请求,换言之,我们就可以借助当前HttpContext的SessionState维护会话状态,进而创建一个支持会话的...图1 ASP.NET兼容模式案例应用结构 步骤一、定义服务契约:ICalculator 案例依然沿用计算服务的例子,不过通过原来直接与传入操作数并得到运算结果的方式不同,为了体现会话状态的存在,我们将本案例的...那么对于ASP.NET兼容模式下的WCF也一样,要想让服务端能够识别会话,就需要让每个服务调用的HTTP请求携带Session的识别信息,我们也可以通过传递Cookie的方式来解决这个问题。

824100

WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side...)模式和ASP.NET兼容模式。...由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一样的方式处理基于.svc的请求,换言之,我们就可以借助当前HttpContext的SessionState维护会话状态,进而创建一个支持会话的...图1 ASP.NET兼容模式案例应用结构 步骤一、定义服务契约:ICalculator 案例依然沿用计算服务的例子,不过通过原来直接与传入操作数并得到运算结果的方式不同,为了体现会话状态的存在,我们将本案例的...那么对于ASP.NET兼容模式下的WCF也一样,要想让服务端能够识别会话,就需要让每个服务调用的HTTP请求携带Session的识别信息,我们也可以通过传递Cookie的方式来解决这个问题。

998100
  • WCF技术剖析系列总结篇

    (阅读全文) 5、利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET...)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。...只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求下下文;基于文件或者Url的授权;HttpModule扩展;身份模拟(Impersonation...由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一样的方式处理基于.svc的请求,换言之,我们就可以借助当前HttpContext的SessionState维护会话状态,进而创建一个支持会话的...接下来,我们就通过一个简单的例子,一步步地创建这样的会话服务。本案例采用如图1所示的3层结构。

    1K90

    《WCF技术剖析》博文系列汇总

    [第5篇] 利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF...服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。...只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求下下文;基于文件或者Url的授权;HttpModule扩展;身份模拟(Impersonation...由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一样的方式处理基于.svc的请求,换言之,我们就可以借助当前HttpContext的SessionState维护会话状态,进而创建一个支持会话的...实例与会话是WCF非常重要的两个特性,它们既相对独立,又互相制约。实例模式与对会话支持程度的不同组合,会让最终的服务表现出截然不同的行为。

    1.4K100

    WCF技术剖析(卷1)之目录

    构建一个简单的WCF应用            步骤一:构建整个解决方案            步骤二:创建服务契约            步骤三:创建服务            步骤四:通过自我寄宿的方式寄宿服务...            7.4.4  案例演示7-3:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务            7.5  通过Windows Service进行服务寄宿...WCF会话简介            9.4.2  WCF会话编程模型            9.4.3  会话(Per-Session)实例上下文模式        9.5  会话模式、绑定与实例上下文模式...            9.5.1  单调服务决定于单调实例上下文模式            9.5.2  单例服务决定于单例实例上下文模式            9.5.3  会话服务决定于会话信道...(栈)和会话实例上下文模式        9.6  WCF服务实例上下文提供机制            9.6.1  服务实例上下文的提供者(InstanceContextProvider)

    97890

    《WCF技术剖析(卷1)》(修订版)目录

    WCF的四大行为 7.2. ServiceHost 7.2.1. 服务描述的创建(S701) 7.2.2. 运行时框架体系的构建 7.2.3. 服务的批量寄宿(S702) 7.2.4....ASP.NET兼容模式 7.4.5. 非HTTP协议寄宿 7.5. Windows 服务寄宿(S708) 第8章 客户端 (Client) 8.1. 一个精简版的WCF框架 8.1.1....服务代理的真实代理是什么? 8.1.3. 服务调用的大致流程 8.1.4. 实例演示:创建一个WCF框架模拟程序 8.2. ChannelFactory 8.2.1....会话绑定 9.5. 会话模式 9.5.1. 基于信道栈的服务实例上下文提供机制 9.5.2. 会话实例上下文模式与可伸缩性 9.5.3. 会话与状态无关的服务设计 9.6....会话服务决定于会话信道(栈)和会话实例上下文模式 第10章 WCF实例研究 (WCF in Practice) 10.1. VM简介 10.1.1. 基本功能 10.1.2.

    1.1K80

    快速入门系列--WCF--02消息、会话与服务寄宿

    WCF服务是否支持会话?WCF所提供的服务是单例的呢还是单调的呢?服务寄宿和客户端代理是如何实现的呢?...可以这么说,整个WCF服务都是构建在SOAP消息的基础上的,而SOAP消息是建立在XML这种跨平台的数据格式的基础上的,有人可能会说WCF也支持Restful风格的服务并支持json格式的数据,的确是这样...这部分的内容主要集中在对实例上下文的概念和单例、单调、会话三种模式的理解。在托管应用程序中,当创建一个托管对象时,CLR会在托管堆为该对象分配内存空间,对象的生命的终结对应内存的回收。...而单例模式对资源的消耗较少,每次完成调用就释放资源,但是当请求多时,会有很多请求需要排队,响应不够及时。而会话模式,根据用户来创建服务示例,算是一种折衷。...通过.svc文件来标识服务,提供ASP.NET并行和兼容两种模式,默认使用第一种,第二种仅在需要共享SessionState时,不常用。

    1.4K50

    WCF技术剖析(卷1)之前言

    的发布和导入、服务代理的创建和服务调用等等。...此外,还会深入介绍两种不同模式下,即ASP.NET并行模式(ASP.NET Side by Side)和ASP.NET 兼容(ASP.NET Compatible),实现WCF服务寄宿的实现原理和表现行为...第八章 客户端(Client) 本章主要介绍在客户端如何创建服务代理进行服务调用,以及WCF客户端框架内部如何完成一次正常的服务调用。...在本章的最后的部分还会为你提供基于会话服务调用的最佳实践。...本章将详细介绍WCF三种典型的事例化模式所表现的行为、实现的原理以及各自适合的场景。在介绍会话的部分会对深入剖析会话如何保持客户端多次服务调用的状态,以及会话、实例化模式、绑定和信道之间的关系。

    1K100

    《WCF技术剖析(卷2)》目录

    WCF基本异常处理模式 1.1.1. 当异常从服务端抛出(S101) 1.1.2. 异常细节的传播(S102) 1.1.3. 自定义异常信息 1.2....编写可靠会话服务 5.2.1. 实例演示:通过WCF服务传输图片(S501) 5.2.2. 可靠会话绑定 5.3. 可靠会话的实现原理 5.3.1. 从信道层看可靠会话的实现 5.3.2....从传输协议的局限性和消息交换模式看可靠会话的实现 5.3.3. 可靠会话最佳实践 第6章 队列服务 (Queued Services) 6.1. MSMQ简介 6.1.1. MSMQ能解决什么问题?...实例演示:通过扩展实现基于IoC的服务实例的创建(S903,S904) 第10章 WCF 4.0新特性(New Features in WCF 4.0) 10.1. 简化开发体验 10.1.1....可被发现的服务(Discoverable Service) 10.3.3. 目标服务的探测和解析 10.3.4. 实例演示:如何利用服务发现机制实现服务的“动态”调用?(S1002) 10.3.5.

    1.3K90

    WCF系列教程之WCF中的会话

    要求回话,即所有调用(支持调用的基础消息交换)都必须是同一个会话的一部分,如果回话结束,然后还在当前回话通道发送消息,则会重新开一个通道,进行和服务端的通话 (3)、NotAllowed:禁止会话,即服务端不会与客户端进行消息交换...3、影响WCF会话机制的因素 (1)、设置了SessionMode的值为Required,当采用的BasicHttpBinding时,因为BasicHttpBinding不支持会话,所以程序报错. (2...NetNamedPipeBinding来说,由于其传输类型本身具有支持会话的特性,所以采用了这两种绑定类型的终结点服务协定的会话模式不能设置为NotAllowed,即使关闭了安全会话和可靠会话也不行。...二、WCF中的回话和Asp.Net中的回话 1、WCF中回话的主要功能有以下: (1)、他们由调用程序显示启动或者关闭 (2)、会话期间传递的消息按照接收消息的顺序进行处理。...注意:因为默认的服务实例化模型(InstanceContextMode)采用PerSession,即每个服务实例都各自创建了一个会话通道,当Client调用Add后会话关闭,但Client1的会话通道并没有关闭

    80450

    WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制

    和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service Proxy)。而ChannelFactory则是服务代理的创建者。...三、如何有效利用ChannelFactory的缓存机制 为了能够充分利用ChannelFactory的缓存机制,获得更好的服务调用性能,我们可以得出以下两个最佳实践: 避免通过人为指定绑定对象创建...注:部分内容节选自《WCF技术剖析(卷1)》第八章:客户端(Clients) WCF技术剖析系列: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF技术剖析之二:再谈IIS与ASP.NET...管道 WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session...)的WCF服务 WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成

    961110

    WCF和ASP.NET Web API 接口执行时间监控

    具体可以参看 利用Windows性能计数器(PerformanceCounter)监控。 三种不同的WCF相关性能计数器与.NET Framework 3.5 一起安装。...使用以下模式命名计数器实例: ServiceName@ServiceBaseAddress服务范围内的计数器是从终结点集合中的计数器聚合来的。...创建新的 InstanceContext 时,用于创建服务实例的性能计数器将递增。...请注意,即使在(通过现有服务)收到非激活消息时,或在从一个会话连接到实例、结束会话然后从其他会话重新进行连接时,也将创建新的 InstanceContext。...下面我们来讨论下WCF和ASP.NET Web API 接口执行时间监控,下面是我网上找到的相关解决方案 Capturing WCF Request Execution Time :通过性能计数器和DispatchMessageInspector

    1.5K80

    Asp.net web api 知多少

    所以,如果你想以快速且简单的方式暴露你的服务端数据到浏览器端和现代设备app上,你应该有一个API,它负责兼容浏览器和所有设备。...它不像WCF REST service那样需要配置乏味的配置文件。 使用WEB API创建服务十分简单。 基于HTTP并且容易定义,以REST方式公开和使用。...当您想创建一个可以使用快速传输通道的服务时,请选择WCF,如TCP,命名管道,或者甚至UDP(在WCF 4.5),并且当所有其他通道不可用时能够支持HTTP传输信道。...主要有以下区别: ASP.NET MVC 用来创建web应用返回视图和数据;但是ASP.NET WEB API 是用来创建完整的HTTP服务,仅返回数据无视图返回。...主要的区别有以下几点: 在WEB API 路由模式中 {action}参数是可选的,但是你可以自行包含 一个 {action} 参数。在ASP.NET MVC中 {action} 参数是强制的。

    4.8K50

    WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    技术剖析(卷1)》第五章:序列化与数据契约(Serialization and Data Contract) WCF技术剖析系列: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF...技术剖析之二:再谈IIS与ASP.NET管道 WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 WCF技术剖析之五:利用...ASP.NET兼容模式创建支持会话(Session)的WCF服务 WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 WCF技术剖析之七:如何实现...WCF与EnterLib PIAB、Unity之间的集成 WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制 WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果...WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 WCF技术剖析之十一:异步操作在WCF中的应用(上篇) WCF技术剖析之十一:异步操作在WCF中的应用(下篇) WCF技术剖析之十二:数据契约

    85180

    菜菜从零学习WCF九(会话、实例化和并发)

    可以从会话派生的功能取决于关联的性质。 --不存在与WCF会话相关联的常规数据存储区。 ASP.NET会话和WCF会话的区别 --ASP.NET会话总是由服务器启动。...--ASP.NET会话原来本是无序的。 --ASP.NET会话提供了一种跨请求的常规数据存储机制。 客户端应用程序和服务应用程序以不同方式与会话交互。...通过直接使用InstanceContext或实现一个自定义实例上下文提供程序,可以做到这一点 当WCF服务接受客户端会话时,默认情况下启用以下功能: --通过同一用户定义的服务对象来处理WCF客户端对象之间的所有调用...Perseesion:为每个新的客户端会话创建一个新的InstanceContext(以及相应的服务对象),并在该会话的生存期内对其进行维护(这需要使用支持会话的绑定)。   ...若要使用此并发模式,服务实现必须是线程安全的。   Reentrant:每个服务实例一次只能处理一个消息,但可以接受可重入的操作调用。仅当服务通过WCF客户端对象提供服务时才会接受这些调用。

    47830

    通过ASP.NET Output Caching实现声明式缓存

    WCF通过操作行为AspNetCacheProfileAttribute利用ASP.NET的输出缓存提供一种针对于某个操作的声明式缓存机制。...关于CacheProfile的配置属于ASP.NET的范畴,在这里我们不会作过多的讨论。 既然是采用ASP.NET输出缓存,WCF服务自然需要采用IIS寄宿并采用ASP.NET 兼容模式。...我们将AspNetCompatibilityRequirementsAttribute特性应用在服务类型上并将RequirementsMode属性设置为Allowed以提供对ASP.NET兼容模式的支持...True以开启ASP.NET兼容模式。...既然我们采用ASP.NET兼容模式来寄宿服务,意味着我们调用某个服务与访问某个页面没有本质的区别,所以基于Web页面的输出缓存能够应用于基于某个服务操作的调用就不足为奇了。

    77270

    WCF 4.5:配置文件更小,对ASP.NET的支持更好

    尽管把WCF部署在Windows服务中是完全可以接受的,但是大多数开发者会在工作中继续使用IIS。为什么不呢,IIS提供了对很多特性的内建支持,像身份验证、状态管理以及过程回收等。...但是在这个模型中还有一些微软正在努力解决的限制。例如,当前开发者需要在两个地方配置哪种身份验证方式能够得到支持。如果他们意外忘记了sync,那么服务就会停止运行。...请注意这完全是客户端工具的问题,WSDL会列出所有选项。 在WSDL中存在的缺陷在于为HTTPS服务端口创建URI的方面。...Ori认为, 当你把WCF服务部署在IIS中时,即便你不使用ASP.NET兼容模式,也会占用一些ASP.NET的管道,这在MSDN的文章《WCF 服务和ASP.NET》中有记录(你需要查找关于PostAuthenticateRequest...ASP.NET的支持更好

    90450

    WCF学习笔记 1

    WCF具有如下的优势:   1、统一性 2、互操作性 3、安全与可信赖 4、兼容性 理解面向服务(SOA) SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构...SOA原则: 1、边界清晰 2、服务自治 3、兼容性基于策略 4、共享模式(schma)和契约 WCF体系架构简介 ? 契约与说明 契约定义消息系统的各个方面。...处理事务; 调度行为:控制WCF处理消息的方式; 消息传递 消息传递层:说明数据的交换格式和传输模式。...当客户端添加WCF服务引用的时候,会首先通过元数据取得服务器端的契约信息、终结点信息,然后根据这些信息在客户端创建了代理类,我们在客户端调用WCF服务的过程实际上就是通过代理类调用WCF服务的过程。...WCF:其实一定程度上就是一个特殊的ASP.NET WebService,因为它支持Web Service的行业标准和核心协议,因此ASP.NET WebService和WSE能做的事情,它几乎都能胜任

    93140

    通过ASP.NET Output Caching实现声明式缓存

    WCF通过操作行为AspNetCacheProfileAttribute利用ASP.NET的输出缓存提供一种针对于某个操作的声明式缓存机制。...关于CacheProfile的配置属于ASP.NET的范畴,在这里我们不会作过多的讨论。 既然是采用ASP.NET输出缓存,WCF服务自然需要采用IIS寄宿并采用ASP.NET 兼容模式。...我们将AspNetCompatibilityRequirementsAttribute特性应用在服务类型上并将RequirementsMode属性设置为Allowed以提供对ASP.NET兼容模式的支持...True以开启ASP.NET兼容模式。...既然我们采用ASP.NET兼容模式来寄宿服务,意味着我们调用某个服务与访问某个页面没有本质的区别,所以基于Web页面的输出缓存能够应用于基于某个服务操作的调用就不足为奇了。

    79280
    领券