2013-01-20 1 views
0

WCF Rest Service가 있고 동일한 웹 사이트의 aspx 페이지에서이를 호출하려고합니다 (예 : 나머지 웹 사이트와 웹 사이트가 모두 같은 웹 사이트에 있음) . 세션을 활성 상태로 유지해야합니다. 다음이 발생합니다

세션 쿠키를 전달하지 않으면 서비스가 다른 세션을 만듭니다. 세션 쿠키를 전달하면 httpwebrequest가 오랜 시간이 걸리고 시간 초과가 발생합니다.

내가 잘못하고있는 것이 있습니까? 또는 호출하는 asp.net 페이지의 동일한 세션을 유지하면서 REST 서비스를 호출하는 더 좋은 방법이있을 수 있습니다.asp.net 코드에서 wcf REST를 호출 할 때 세션을 활성 상태로 유지

나는 다음 나머지 서명이 있습니다

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()); 

    } 

서비스가 제대로 작동하고 사용하여 자바 스크립트에서 호출 동일한 세션을 계속 다음과 같이 코드 숨김에서 나는이 서비스를 호출하고

 [OperationContract()] 
     [WebInvoke(Method = "POST", 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json)] 
     string GetFilterQuery(LookupRequestDTO request); 

$ .ajax 접근 방식

답변

0

나는 이것에 대해 좀 더 조사를 해본 결과 최선의 방법은 아키텍처를 다시 설계하는 것이었다. 기본적으로 REST를 code-behid에서 호출하는 것은별로 의미가 없습니다. 단순히 올바른 도구가 아닙니다. wcf 서비스를 만드는 대신 실제 코드를 호출합니다. 그러나 코드가 직접 호출되는 것은 아니며 명령 패턴을 사용하고 있습니다. 이것은 우려의 분리 (wcf 통신의 성능 병목 현상없이)를 유지하는 것입니다.

anyong에 시간 초과 문제에 대한 해결책이있는 경우 알려 주시기 바랍니다. 지금 당장은 이것을 대답으로 표시 할 것입니다.

관련 문제