2

私のサービスは にアクセスする必要があるため、wsHttpBinding バインディングを使用する必要がありますHttpContext.Current.Session。私の調査から、これは webHttpBinding では不可能であることがわかりました。しかし、私の ajax はすべて JSON を使用するように書かれており、すべてを書き直す必要がなければ、非常に気に入っています。

セッションを使用する必要があるまで、私のサービスは webHttpBinding と完全に連携します。

または、セッションへの webHttpBinding アクセスを取得する方法はありますか?

編集:

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <behaviors>
      <endpointBehaviors>
        <behavior name="LiteBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="LiteBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="LiteBehavior" name="Lite.CMS.Services.LiteService">
        <endpoint behaviorConfiguration="LiteBehavior" address="" binding="webHttpBinding" contract="Lite.CMS.Services.Interfaces.ILiteService" />
      </service>
    </services>
  </system.serviceModel>

そして私の契約:

[ServiceContract (SessionMode=SessionMode.Allowed)]
public interface ILiteService
{
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    [OperationContract]
    void Item_Save(string Name);
}

そして実装:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class LiteService : ILiteService
{
    public void Item_Save(string Name)
    {
        // I can't get access to HttpContext.Current.Session variables here.
    }
}
4

1 に答える 1

0

webHttpbindingはステートレスバインディングであり、SOAPを使用しません。
SessionMode = SessionMode.Requiredを設定しようとすると、サービスの開始時にエラーがスローされます。
ステートレスプロトコルでセッションを実装する場合は、Cookieを使用して手動で実装する必要があります。

見る :

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/fe2a2ce9-ba97-4784-95f8-bdce5ffcd8eb/RestfulWCFサービスで
セッションを管理する方法RESTWCF
サービスとASP.NETでのセッション

于 2012-08-01T13:11:30.397 に答える