wake-up-neo.com

Berechtigungsheader zur Webreferenz hinzufügen

Ich versuche, Anfragen an den Webservice eines Kunden zu stellen (ich kenne die zugrunde liegende Plattform des Kunden nicht). Ich habe die WSDL des Clients in Visual Studio 2010 mit "Add Web Reference" verbraucht und meine Proxy-Klasse ("ContactService") generiert. 

Ich muss jetzt einen Berechtigungsheader wie den unten stehenden zu meiner Serviceanfrage hinzufügen.

Header=Authorization & Value=Basic 12345678901234567890

(Der Wert "123456 ..." oben ist nur ein Platzhalter.)

ContactService service = new ContactService();

//not sure if this is the right way - it's not working
WebClient client = new WebClient();
client.Headers.Add("Authorization", "Basic 12345678901234567890");            
service.Credentials = client.Credentials;

int contactKey = null;
try
{                
   contactKey = service.CreateContact("ABC", emailAddress, firstName, lastName, null);
}

Was ist der richtige Weg, um den Berechtigungsheader der Serviceanforderung hinzuzufügen?

Vielen Dank!

10
Mike

Die obige Antwort war auf dem richtigen Weg, aber sie musste nur an einem anderen Ort sein.

Ich fügte dies zu meiner Webreferenz-Proxy-Klasse hinzu, die von .Net generiert wurde:

protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);            
        req.Headers.Add(HttpRequestHeader.Authorization,
                "Basic " + "12345678901234567890");

        return req;
    }

Eine Webreferenz-Proxyklasse erweitert System.Web.Services.Protocols.SoapHttpClientProtocol. Diese Klasse enthält einen Aufruf von System.Net.WebRequest.GetWebRequest (Uri Uri). Mit einem WebRequest können wir bestimmte Header für die Anforderung festlegen, wenn die Methoden der Proxy-Klasse aufgerufen werden. 

Danke für Ihre Hilfe!

13
Mike

Es sind einige Änderungen vorzunehmen.

Erstens gibt es eine praktische Konstante HttpRequestHeader.Authorization.

Zweitens: Erwarten sie, dass der Header Base64-codiert ist - dies ist normalerweise für die Basisauthentifizierung erforderlich.

WebClient.Headers.Add(HttpRequestHeader.Authorization, 
    "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));
10
Fenton

Ich schreibe das für wen das Problem jetzt hat. Da die Vererbungshierarchie in den vorigen Antworten bis zur WebClientProtocol-Klasse reicht, verfügt diese Klasse über eine ICredentials-Eigenschaft. Setzen Sie diese Eigenschaft einfach durch eine NetworkCredential-Instanz wie folgt:

YourServis.Credentials = new NetworkCredential("UserName", "Password", "Domain");

Ich denke, das ist der einfachste Weg, ohne dass Reference.cs geändert oder Header hinzugefügt werden müssen.

0
Ali Faradjpour