単純なWCFWebサービスを呼び出すjQueryJavaScriptがあります。JavaScriptでCookieを設定し、サーバー側で読み取るのはかなり簡単です。
これがそのコードです。
クライアント側(JavaScript):
document.cookie = "father=christmas";
サーバー側(WCFのC#):
var cookieHeader = WebOperationContext.Current.IncomingRequest.Headers[System.Net.HttpRequestHeader.Cookie];
if (!String.IsNullOrEmpty(cookieHeader))
{
var match = cookieHeader.Split(';').Select(cookie => cookie.Split('=')).FirstOrDefault(kvp => kvp[0] == "father");
if (match != null)
{
result = match[1]; // result now equals "christmas"
}
}
ただし、サーバーのWCFにCookieを設定し、クライアントでそれを読み取りたいと思います。これが失敗した私のコードです。
サーバー側(WCFのC#):
WebOperationContext.Current.OutgoingResponse.Headers[System.Net.HttpResponseHeader.SetCookie] = "cloud=lonely";
クライアント側(jQuery JavaScript):
$(document).ready(function () {
$.ajax({
url: "/ScratchpadSite/Service.svc/Hallo",
type: "POST",
success: function (data, textStatus, jqXHR) {
var xrh = jqXHR.getAllResponseHeaders();
$('body').html('<p>Father ' + data.d + '<\/p>');
},
error: function (jqXHR, textStatus, errorThrown) {
$('body').html('<p>' + textStatus + ': ' + errorThrown + '<\/p>');
}
});
});
ただし、xhrの値(「cloud = lonely」Cookieが含まれることを期待していた変数)は次のとおりです。
サーバー:ASP.NET開発サーバー/10.0.0.0 日付:2012年4月4日水曜日15:29:27 GMT X-AspNet-バージョン:4.0.30319 コンテンツの長さ:17 キャッシュ制御:プライベート コンテンツタイプ:application / json; charset = utf-8 接続:閉じる
(注:私のWebページ(JavaScriptを含む)とWCFサービスは同じサーバー上にあるため、クロスドメインの問題は発生しないはずです。)
応答ヘッダーCookieを正しく設定していますか?もしそうなら、私はクライアントに戻って価値を見つけるためにどこを探すべきですか?そうでない場合、私はこれをどのように行うべきですか?