我需要开发一个只能通过HTTP / HTTPS公开的WCF服务。如何使用HTTP cookie?

时间:2010-11-08 14:28:03

标签: c# .net wcf http

首先,我承认我是WCF的新手。仍未走出训练轮。

我被分配开发WCF服务,部分要求是需要将每个请求作为HTTP cookie传递一种“会话令牌”。 (可以预见,此类令牌需要在此类服务中成功“登录”调用的HTTP响应头中生成。)

这是直截了当的吗?

3 个答案:

答案 0 :(得分:2)

免责声明:您实际上并不应该这样做,因为它迫使WCF服务充当Web服务。但如果您需要cookie,请继续阅读。

如果您只需要会话ID,则可以从以下网址获取:

OperationContext.Current.SessionId      

如果你需要cookie,你需要跳过一些箍。它的要点是(1)设置asp.net兼容性,(2)引用HttpContext.Current属性。

您的服务需要使用wsHttpBinding(或其他支持会话的绑定)。如果将项目创建为IIS中托管的WCF服务,则默认情况下会获得这些服务。您还需要在配置文件中设置asp.net兼容性。

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <bindings>
    <wsHttpBinding>
      <binding name="MyBinding" allowCookies="false" ... </binding>
    </wsHttpBinding>
  </bindings>

(请参阅链接here了解为什么我有allowCookies = false)

要启用会话,请在WCF服务合同上设置以下内容

[ServiceContract(SessionMode=SessionMode.Required)]
public interface IMyWcfService {...}

您可能还想在服务本身上设置ServiceBehavior(PerSession是默认值),您需要设置asp.net兼容性。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
public class MyWcfService : IMyWcfService {...}

您可以访问的一些相关属性:

// Gives you the current session id as a string
HttpContext.Current.Session.SessionID  

// Indicates whether the service is using sessionless cookies
HttpContext.Current.Session.CookieMode

// Indicates whether the session id is stored in the url or in an HTTP cookie 
HttpContext.Current.Session.IsCookieless

// The cookies themselves
HttpContext.Current.Request.Cookies
HttpContext.Current.Response.Cookies

// The session and cache objects
HttpContext.Current.Cache
HttpContext.Current.Session

WCF服务中会话的链接:
http://msdn.microsoft.com/en-us/library/ms733040.aspx

HTH,
詹姆斯

答案 1 :(得分:0)

msdn上的这个主题可以帮助你http://msdn.microsoft.com/en-us/library/bb398778.aspx

此外,这可以帮助您在IIS中托管您的WCF服务:http://msdn.microsoft.com/en-us/library/aa702682.aspxhttp://msdn.microsoft.com/en-us/library/bb332338.aspx(使用互联网信息服务托管)

答案 2 :(得分:0)

这只是部分地回答了你的问题,但是会给你一个启动配置。 在服务配置部分下的配置文件中,创建基本的http绑定:

<system.serviceModel> 
        <bindings>
  <basicHttpBinding>
      <binding name="myHttpBinding" allowCookies="true">

      </binding>

  </basicHttpBinding>
</system.serviceModel>

然后阅读wcf绑定和端点配置。