2009-08-25 102 views
1

外部のサーバーと通信するためにWebサイトにWebサービスを使用しています。 外部サーバーがセッションIDを要求します。HttpWebRequest:セッションIDの取得方法

私たちの次のコードは、外部のサーバに尋ねる:

HttpWebRequest webRequest = WebRequest.Create(ExtUrl) as HttpWebRequest; 
webRequest.Credentials = new NetworkCredential(ExtAccountToUse, ExtPassword); 
HttpWebResponse webResponse; 
webRequest.Method = "POST"; 
webRequest.ContentType = "application/x-www-form-urlencoded";     
StreamWriter writer = new StreamWriter(webRequest.GetRequestStream()); 
writer.Write(xmlOutput); 
writer.Close();    
webResponse = webRequest.GetResponse() as HttpWebResponse; 

は、外部のサーバーに送信するセッションIDを取得することが可能ですか?お時間を

おかげ

+0

あなたはXML(xmlOutput)を送信しているように見えますが、標準のHTMLフォームのようにコンテンツタイプを設定しています。ちょっと変わったのですが、コンテンツタイプとして "text/xml"を使用していないのはなぜですか? – AnthonyWJones

+0

外部サーバーはどのようにして「セッションIDを要求するのですか」。 – AnthonyWJones

+0

外部サーバーは、サーバーに送信する最初の要求でセッションIDを要求しますか?クライアントで再利用できる有効なセッションIDを生成するのは、対象サーバの責任である必要があるためです。 –

答えて

1

これは、リクエストを送信するサーバーのタイプによって異なります。たとえば、IISでホストされているサイトがある場合は、ASP.NET_SessionIdという名前のセッションID inside a cookie(または要求文字列)が必要です。反対側にJavaサーブレットエンジンがある場合、JSESSIONID(またはリクエストパスパラメータjsessionid)というクッキーが必要です。

だからです。ただし、HttpWebRequest内のCookieを設定することは難しくありません。

CookieContainer cookies = new CookieContainer(); 
cookies.Add(new Cookie("ASP.NET_SessionId", sessionId)); 
request.CookieContainer = cookies; 

クッキーの内側に格納したセッション識別子は、特定のフォーマットを持っている必要があり、再び、これはもう一方の端にサーバーの種類によって異なります。あなたは、プロパティCookieContainerを使用することができます。 ASP.NETでは、既定ではクラスSessionIDManagerがセッションIDの生成と検証に使用されます。このクラスはHttpContextが必要であるため、再利用することは難しいです。ただし、セッションIDを生成する方法については、Reflectorで確認できます。

+0

cookie.domainでエラーが発生しました。空にすることはできません – Emanuele

0

取得したセッションIDは、使用してそれを得ることができます懸念している限り:

Session.SessionID 

をしかし、私は、サーバー上のセッションIDを考えていない外部への関心がありますサーバ。

+0

現在のサーバーのセッションIDを使用することは疑いがありますが、外部サーバーと通信するのに便利です。 – AnthonyWJones

+0

私はこの方法を使用していませんが、あなたの時間に感謝 – Xstahef

1

外部サーバーに、以前に送信された要求によって作成されたセッションを識別する既存のセッションIDが必要な場合は、関連するすべての要求に対してCookieContainerのインスタンスを維持する必要があります。あなたが外部のサーバーに話をするために使用するすべてのHttpWebRequestので

CookieContainer myExternalServerCookies = new CookieContainer(); 

この行含まれます: - 外部サーバーがセッションCookieを設定するとき

request.CookieContainer = myExternalServerCookies; 

を今、それは後続の要求でそのクッキーが表示されます。

関連する問題