Silverlight/Tips

ASP.NET 웹서비스 세션유지 실버라이트에선 되는데 WinForm에서 안될 때!

길버트리 2010. 1. 13. 09:28

문제(Trouble)

한가지 웹서비스를 만들어 놓고 여러가지 클라이언트를 지원하는 일은 일상다반사이지요.
그런데 실버라이트에서는 세션유지가 잘 되는데, WinForm에서 사용하려고 하면 세션유지가
잘 안되어서 자꾸 로그인이 안 되었다고 에러를 반환하는 일을 겪어보시지 않으셨나요?

아래와 같이 세션을 사용하는 간단한 웹서비스를 생각해 볼 수 있습니다.


    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod(EnableSession=true)]
        public void WriteToSession(string value)
        {
            HttpContext.Current.Session["WrittenValue"] = value;
        }

        [WebMethod(EnableSession = true)]
        public string ReadFromSession()
        {
            if (HttpContext.Current.Session["WrittenValue"] == null)
                return ;

            return HttpContext.Current.Session["WrittenValue"].ToString();
        }       
    }
먼저 실버라이트 어플리케이션에서 Service Reference로 추가하여 테스트하면
WriteToSession 호출하여 저장한 값을 ReadFromSession을 호출하여 받아낼 수 있습니다.

하지만 윈폼(WinForm) 어플리케이션에서 Service Reference로 추가하여 테스트하면
ReadFromSession 호출 시 반환값은 null입니다.

우째 이런 일이!
아무튼 문제를 해결한 방법은 있으니까 안심하시구요.



해결책 (Solution)

1) 웹서비스를 Service Reference로 추가하지 마시고 Web Reference로 추가하세요.
2) 그리고 서비스 객체를 생성하고 Cookie Container를 생성해 줍니다.

MyService service = new MyService()
    CookieContainer = new System.Net.CookieContainer();