WCF Rest Serviceを使用していますが、同じWebサイトのaspxページからこれを呼び出そうとしています(つまり、RESTとWebサイトの両方が同じWebサイトにあります)。セッションをアクティブに保つ必要があります。次のようになります
。セッションCookieを渡さないと、サービスは別のセッションを作成します。セッションCookieを渡すと、httpwebrequestに時間がかかり、タイムアウトになります。
私が間違っていることはありますか?または、asp.netページの呼び出しと同じセッションを維持しながらRESTサービスを呼び出すためのより良い方法があるかもしれません。
私は次のREST署名を持っています:
[OperationContract()]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string GetFilterQuery(LookupRequestDTO request);
コードビハインドから、私はこのサービスを次のように呼んでいます:
HttpWebRequest req = WebRequest.Create(url)
as HttpWebRequest;
req.Method = "POST";
req.Credentials = CredentialCache.DefaultNetworkCredentials;
string result = null;
req.ContentType = "application/json";
req.Referer = this.Page.Request.Url.AbsoluteUri;
var cookieContainer = new CookieContainer();//pass session state;
cookieContainer.Add(new Cookie() { Domain = req.RequestUri.Host, Name = "ASP.NET_SessionId", Value = HttpContext.Current.Session.SessionID });
req.CookieContainer = cookieContainer;
string data = null;
//code that populates data goes here ... (excluded for simplification)
using (Stream webStream = req.GetRequestStream())
using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII))
{
requestWriter.Write(data);
}
using (HttpWebResponse resp = req.GetResponse() //timeout occurs here
as HttpWebResponse)
{
StreamReader reader =
new StreamReader(resp.GetResponseStream());
}
$ .ajaxアプローチを使用してjavascriptから呼び出された場合、サービスは正しく機能し、同じセッションを維持します