httpファサードにajax/json呼び出しを行い、wcfサービスレイヤーに呼び出しを渡すasp.net 4.0アプリケーション(クライアント)があります。
ユーザーは、フォーム認証を使用してクライアントで認証する必要があります。その場合、認証Cookieがhttpファサードに渡され、httpファサードでアクセスできるようになるという考えです。[DinoEspositoの本に基づく設計-MicrosoftASP.NETおよびAJAX:Webアプリケーションの設計]
問題は、ファサードでHttpContext.Current.User.Identity.Nameが空の文字列であり、IsAuthenticatedがfalseであるということです。
web.config(httpファサードレベル)のsystem.ServiceModelセクションに以下を追加して、互換性を有効にしました。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
私は自分のサービスを次のように飾りました:
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
ajax / facadeアプリでデバッグしていると、HttpContext.Current.Request.CookiesにCookieが存在することがわかります。認証されたユーザーではなく、匿名が使用されているようです。
両方のアプリケーションが同じIISサーバーで実行されています。
AJAX対応のwcfサービスへの呼び出しは、serviceProxy.jsを介して行われます。おそらく、このメソッドは必要なCookieを渡していないのでしょうか。
WCFトレースは現在'..ASPXANONYMOUS=.....;を表示しています。ASP.NET_SessionId = ....; メッセージログの.ASPXAUTH=.....'。
単純なものが欠けているような気がしますが、問題に近すぎます。
どんな提案も歓迎します。