`
wumingdlz
  • 浏览: 32491 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
最近访客 更多访客>>
社区版块
存档分类
最新评论

wcf对session的支持

阅读更多
We are hosting WCF in ASPNET compatible mode and utilize ASPNET session handling feature, it works very well.  You can get more than session handling, I mean many of ASPNET built in features, when hosting your WCF in ASPNET compatible mode.

To host WCF in ASPNET compatible mode:

   1. Put this attribute before your implementation class for your interface: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
   2.  Add this to <system.serviceModel> in your Web.config: <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
To add session handling feature, add <sessionState> attribute to your Web.config under <system.web>. You do have 2 ways to handle your session, the cookie way and the cookieless way:
    * <sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" timeout="20"/> for cookie way
    * <sessionState mode="InProc" cookieless="true" regenerateExpiredSessionId="false" timeout="20"/>  for cookieless way

If you do enable cookie for your site, a client session will be grant as soon as you write something to HttpContext.Current.Session dictionary, and the session will expire when timeout or when you call to HttpContext.Current.Session.Abandon().  If you use cookieless, the client session will be grant anyway per client connect.

Silverlight has no problem with ASPNET cookie session, but cookieless session. When you use cookieless session, the sessionID is passed via URL, and ASPNET will return a HTTP 302 response to inform new address (which sessionID embedded), normally browser will divert the call to this new address, but Silverlight does not.  So you have to manually divert it by making  a pre-HttpRequest to get the address:

        // Creating a proxy to WCF
        private void CreateProxy()
        {
            try
            {
                resultText.Text = "Please wait while we are connecting to the service ...";
                // Get the current URI on the fly, then modify the html file name to our service name, then
                // use this to make web request
                string[] URIparts = System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri.Split('/');
                string serviceURIString = System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri.Replace(URIparts[URIparts.Length - 1], "Service.svc");
                // For cookieless problem, we first make a HttpWebRequest to the service,
                // then use the URI return from the response to create proxy
                Uri serviceUri = new Uri(serviceURIString);
                HttpWebRequest HttpRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUri);
                HttpRequest.BeginGetResponse(new AsyncCallback(EndCreateProxy), HttpRequest);
            }
            catch (Exception ex)
            {
                exceptionText.Text = String.Format("{0}", ex.Message);
            }
        }

         void EndCreateProxy(IAsyncResult asyncResult)
        {
            try
            {
                HttpWebRequest HttpRequest = (HttpWebRequest)asyncResult.AsyncState;
                HttpWebResponse HttpResponse = (HttpWebResponse)HttpRequest.EndGetResponse(asyncResult);
                // Create a proxy to WCF
                // Enable the following line to call to an SSL service
                // Binding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
                // Enable the following line to call to an nonSSL service
                Binding binding = new BasicHttpBinding();
                EndpointAddress address = new EndpointAddress(HttpResponse.ResponseUri);
                proxy = new ServiceClient(binding, address);

                resultText.Text = "Result goes here";
                exceptionText.Text = "Exception goes here";
            }
            catch (Exception ex)
            {
                exceptionText.Text = String.Format("{0}", ex.Message);
            }
        }

Remember that you do not need to make this pre-HttpRequest if you use cookie session. But this schema also works with cookie session.


from: http://forums.silverlight.net/forums/t/14175.aspx
分享到:
评论

相关推荐

    WCF学习进阶篇

    - **安全性**: WCF支持多种安全模式,如传输安全、消息安全等,确保数据安全传输。 - **事务处理**: 可以在服务操作中启用事务,确保原子性和一致性。 - **错误处理和诊断**: 通过配置日志、跟踪和异常处理,便于...

    wcf全面解析上册

    WCF支持状态管理,包括会话状态和实例化模式(PerCall、PerSession、Singleton),以及数据缓存,以优化性能和资源利用率。 ### 11. 负载均衡与故障转移 WCF可以通过多端点配置实现负载均衡,通过服务发现和重定向...

    《WCF按部就班学习系列7_WCF事务概述》

    5. **实例模式与事务**:WCF服务的实例模式(Singleton、PerCall、PerSession)对事务处理有影响。例如,PerCall模式下,每个调用都是独立的,事务不会跨调用传播;而Singleton或PerSession模式可能需要考虑跨多个...

    WCF.App.zip

    3. **PerSession会话**:WCF提供了多种会话模式,其中PerSession模式确保了客户端与服务之间的消息顺序,并保持了状态。这意味着每个客户端连接都会与服务建立一个唯一的会话,服务器可以根据会话标识来跟踪和管理...

    WCF系列课程 webcast

    7. **安全性**:WCF支持多种安全模式,如传输安全、消息安全等,以确保数据的安全传输。课程会介绍如何设置和管理认证、授权和加密等安全特性。 8. **服务发现**:WCF提供服务发现机制,使得服务能够自动广播其存在...

    WCF入门和提高:WCF足迹

    2. **提供对不同平台互操作性的支持**:通过标准的 SOAP 消息格式,WCF 可以与其他应用程序进行交互,支持跨平台和跨操作系统的通信。 3. **显式的面向服务特性**:WCF 明确地将服务契约、操作契约和数据契约作为其...

    wcf高手全面教程

    #### 六、支持会话(Session)的WCF服务 - **会话支持的概念**: - 在ASP.NET兼容模式下,WCF服务可以支持会话状态管理。 - **实现方法**: - ASP.NET会话管理机制的使用,例如InProc会话模式。 - 通过配置文件...

    WCF 我的WCF之旅示例代码

    - **WS-* 规范支持**:WCF全面支持Web服务标准,如WS-Security、WS-ReliableMessaging等。 通过这些示例代码,你可以逐步掌握如何创建服务、配置终结点、实现合同、管理会话以及处理安全性问题。同时,学习过程中...

    WCF聊天工具,即时通信

    5. **会话(Session)**:WCF支持会话模式,可以保持客户端和服务之间的上下文,这对于聊天应用中维持用户状态和历史记录至关重要。 6. **安全性**:WCF提供了丰富的安全特性,如身份验证、授权、加密等,确保聊天...

    wcf揭秘中文清晰版

    5. **实例化模式**:WCF支持单例、多例和PerSession三种实例化模式,决定服务实例的生命周期和并发性。单例模式下,服务只有一个实例;多例模式下,每个请求创建一个新实例;PerSession模式下,为每个会话创建一个...

    WCF简单应用示例

    在ASP.NET项目中,我们可以添加对WCF服务的引用,然后像调用本地方法一样调用服务。首先,右键点击项目,选择“添加服务引用”,输入服务地址。之后,可以创建客户端代理类并调用服务。 ```csharp using ...

    WCF实例及文档

    6. **服务的生命周期**:WCF服务有多种实例化模式,包括单例(Singleton)、会话型(PerSession)、多例(PerCall)和持久化(PerEndpoint)。这些模式决定了服务实例如何被创建和销毁。 7. **数据契约**:当涉及...

    WCF学习资料学习资料

    WCF支持多种安全模式,如Transport、Message、TransportWithMessageCredential等,确保数据传输的安全性。身份验证、授权和加密是实现安全服务的关键组成部分。 7. **WCF配置** 服务和客户端的配置通常通过配置...

    WCF服务编程+源代码

    通过对“Programming WCF Services”源代码的分析和实践,你将能够掌握WCF的核心概念,并有能力创建自己的WCF服务。同时,这也将帮助你理解如何与其他系统进行互操作,以及如何解决在分布式环境中可能出现的问题。

    WCF 各种例子

    4. **事务**: WCF支持跨多个操作的事务处理,确保原子性和一致性。你可能会看到如何在服务操作中启用事务,并在客户端中参与这些事务。 5. **可靠性**: WCF提供了消息队列(MSMQ)绑定,可以实现可靠的消息传递,...

    WCF聊天程序示例

    **服务行为**:WCF服务的行为配置决定了服务的行为特性,如服务实例化策略(PerCall或PerSession),错误处理,以及服务的生命周期管理。 **调试和日志**:在开发过程中,WCF提供了丰富的诊断工具,如消息跟踪、...

    .NET 平台的WCF

    6. **实例化模式**:WCF支持多种实例化模式,如单例(Singleton)、会话(PerSession)和多例(PerCall),以控制服务对象的生命周期。 ### WCF与SOA的关系 面向服务架构(SOA)是一种设计原则,强调将业务功能...

    WCF.rar_WCF chm_foundation_wcf

    7. **行为**:WCF的行为元素允许对服务和服务操作进行更精细的配置,如服务行为(ServiceBehavior)、终结点行为(EndpointBehavior)和数据契约行为(DataContractSerializer)等。 8. **服务宿主**:WCF服务可以...

Global site tag (gtag.js) - Google Analytics