2009-08-25 8 views
1

wir verwenden einen Web-Service für eine Website für die Kommunikation mit einem externen Server. Externer Server fragt nach einer Sitzungs-ID.HttpWebRequest: wie erhalten Sie die Session-ID

Unsere folgenden Code fragen externe Server:

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; 

Ist es möglich, eine Session-ID zu senden, um einen externen Server zu bekommen?

Vielen Dank für Ihre Zeit

+0

Sie scheinen XML (xmlOutput) zu senden, aber Sie legen den Inhaltstyp so fest, als wäre es ein Standard-HTML-Formularpost, das ist ein wenig seltsam, warum verwenden Sie nicht "text/xml" als Inhaltstyp? – AnthonyWJones

+0

In welcher Weise fragt der externe Server nach einer Sitzungs-ID? – AnthonyWJones

+0

Fordert der externe Server bei der ersten Anfrage, die Sie an den Server senden, eine Sitzungs-ID an? Es sollte in der Verantwortung des Zielservers liegen, eine gültige Sitzungs-ID zu generieren, die Sie dann im Client wiederverwenden können. –

Antwort

1

Das hängt vom Typ des Servers ab, an den Sie die Anfrage senden. Wenn Sie beispielsweise eine von IIS gehostete Site haben, erwartet sie eine Sitzungs-ID inside a cookie mit dem Namen ASP.NET_SessionId (oder in der Anforderungszeichenfolge). Wenn Sie auf der anderen Seite eine Java-Servlet-Engine haben, erwartet sie einen Cookie namens JSESSIONID (oder einen Anfragepfad-Parameter jsessionid).

So kommt es darauf an. Das Setzen von Cookies innerhalb eines HttpWebRequest ist jedoch nicht schwierig. Sie können die Eigenschaft CookieContainer:

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

Die Sitzungs-ID Sie in der Cookie speichern soll ein bestimmtes Format haben und wieder, dies ist abhängig vom Servertyp am anderen Ende. In ASP.NET wird standardmäßig die Klasse SessionIDManager verwendet, um Sitzungs-IDs zu erstellen und zu validieren. Diese Klasse ist schwer wiederzuverwenden, da sie eine HttpContext erfordert. Sie können jedoch mit Reflector überprüfen, wie eine Sitzungs-ID generiert wird.

+0

Fehler auf cookie.domain. Es kann nicht leer sein – Emanuele

0

so weit wie immer Sitzungs-ID betrifft Sie es mit bekommen:

Session.SessionID 

aber ich Session-ID auf dem Server nicht wissen, ist der Meinung von Interesse an externe Server.

+0

Ich bezweifle, dass die Verwendung der aktuellen Server Session ID ist nützlich im Gespräch mit einem externen Server. – AnthonyWJones

+0

Ich benutze diesen Weg nicht, aber danke für Ihre Zeit – Xstahef

1

Wenn Sie meinen, dass der externe Server eine vorhandene Sitzungs-ID benötigt, die eine Sitzung identifiziert, die durch vorherige Anforderungen erstellt wurde, müssen Sie eine Instanz eines CookieContainer für alle betroffenen Anforderungen verwalten.

CookieContainer myExternalServerCookies = new CookieContainer(); 

Mit jedem HttpWebRequest Sie an den externen Server sprechen verwenden, enthalten diese Zeile: -

request.CookieContainer = myExternalServerCookies; 

Nun, wenn der externe Server ein Session-Cookie setzt, wird es das Cookie in nachfolgenden Anforderungen sehen.