VS2012、フレームワーク 4.5 を使用
WebService.asmx ファイルだけの単純な webapp があります。SetData
プロジェクトを実行すると、これら 2 つの webmethods が公開されますGetData
。C# コードは次のとおりです。
[WebService(Namespace = "http://mydomain.com/")]
[System.Web.Script.Services.ScriptService]
public class WebService: System.Web.Services.WebService {
[WebMethod(EnableSession=true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SetData() {
HttpContext.Current.Session["someData"] = "xxxxxxxxx";
return "";
}
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetData() {
if (HttpContext.Current.Session["someData"] == null)
return "Session NULL";
else
return HttpContext.Current.Session["someData"].ToString();
}
}
web.config は、CORS をaspNetCompatibilityEnabled
有効にし、セッション共有も有効にするように設定されています。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="null" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
したがって、プロジェクトは正常に実行されます。ここで、単純な HTML ページからこれら 2 つのメソッドを使用したいと考えています (HTML はASPNETプロジェクトの一部ではなく、単なる HTML ファイルです... したがって、CORS の問題です)。しかし、それはただの空のページです):
<script type="text/javascript">
$(document).ready(function() {
//jQuery.support.cors = true;
$.ajax({
type: "POST",
url: "http://localhost:62776/WebService.asmx/SetData",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert('SetData OK');
$.ajax({
type: "POST",
url: "http://localhost:62776/WebService.asmx/GetData",
contentType: "application/json; charset=utf-8",
dataType: "json",
//async: true, -- makes no difference
//beforeSend: function(xhr){
// xhr.withCredentials = true;
//},
success: function(msg) {
alert('GetData: ' + msg.d);
},
error: function(e){
alert("GetData: Unavailable");
}
});
},
error: function(e){
alert("SetData: Unavailable");
}
});
});
</script>
HTML ページを実行すると、次のようSetData OK
になりますGetData: Session NULL
が、GetData: xxxxxx
だから私の質問は、どうすればSession Object
CORS呼び出し間で同じものにアクセスできますか?
また、ASPNET AUTH COOKIES が AJAX 呼び出し間で正しいセッション ID を何らかの方法で保持すると考えて、認証を有効にしようとしましたが、うまくいきませんでした。SOAP エンベロープを使用して各 AJAX 呼び出しを認証し、セッション情報を送信する方法も考えられますが、それはやり過ぎのようです。