2010-04-08 5 views
15

Ich möchte einen Web-Service verweisen, und es erfordert Benutzer/Pass-Authentifizierung. In VS 2008, wenn ich versuche, "Verweis hinzufügen" oder "Service-Referenz hinzufügen", alles, was ich eingeben kann, ist die URL, gibt es keine Möglichkeit, meine Anmeldeinformationen einzugeben. Natürlich, wenn ich versuche, die ws zu laden, es zeigt mir eine nette Nachricht:Wie Service-Referenz in Visual Studio 2008 Authentifizierung gegen passwortgeschützten Web-Service hinzufügen

The request failed with HTTP status 403: Forbidden. Metadata contains a reference that cannot be resolved: The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm="weblogic"'. The remote server returned an error: (401) Unauthorized.

Also meine Frage ist: Ist es möglich (mit VS 2008) einen Verweis auf einen Webdienst hinzuzufügen, die geschützt ist? Wie?

Antwort

4

Je nachdem, wie der Dienst authentifiziert wird, können Sie sol sein.

Wenn es ASP.Net Mitgliedschaft verwendet, keine Freude gefunden werden. Wenn der Dienstcode von Ihnen stammt, deaktivieren Sie die Authentifizierung vorübergehend, um einen Proxy zu generieren.

Ansonsten versuchen, einen Standard-Mechanismus:

http://username:[email protected]/service 

Beste Wahl: das WSDL von Ihrem Lieferanten Holen und verwenden wsdl.exe Ihre Proxy zu generieren.

-Update als Antwort auf Kommentar:

Ja, den Dienst, um spöttisch einen Proxy zu erzeugen, ist ein durchaus vernünftiger Plan, wenn der Zieldienst ein ASP.net-Service ist oder nur akzeptiert und gibt einfache Typen.

Der Web-Service-Konstruktor hat eine Überladung, die eine Uri akzeptiert, oder Sie können nur die generierte Quelle ändern.

Wenn Sie die erzeugte Quelle ändern wählen, werden Sie wahrscheinlich wollen nur die Proxy-Klasse extrahieren und die Webservice Referenz löschen:

Nachdem Sie die Proxy mit VS erzeugen, wenn du alle Dateien anzeigen "und Bohrer In der WebService-Referenz finden Sie eine Datei namens Reference.cs. Dies ist die einzige Datei, die Sie benötigen. Kopieren Sie den Inhalt in eine andere Datei und löschen Sie dann einfach die Webdienst-Referenz.

Wenn Sie dies tun, können Sie möglicherweise Ihre Authentifizierungslogik zu diesem Zeitpunkt in den Proxy hinzufügen.

Aber wieder, die WSDL vom Anbieter zu bekommen ist Ihre beste Wette.

Viel Glück.

+0

Nope hinzuzufügen, haben wir keine Kontrolle über den Dienst (und sie gewannen‘ t das Authentifizierungsschema entfernen). Die Verwendung des duo-Benutzers: Übergeben der URL funktioniert auch nicht ... Es wäre möglich, einen Verweis auf einen anderen Dienst hinzuzufügen (einen, der keine Authentifizierung benötigt) und danach einige Konfigurationsdateien zu ändern und die URL zu ändern meine Zugangsdaten eingeben ??? – ditto1977

+0

@ user312305 - sicher, das wäre ein Weg zu gehen. Siehe aktualisierte Antwort. Was die eigentliche Authentifizierung angeht, das ist eine andere Geschichte. In Ihrer Frage wird gefragt, wie Sie einen Proxy generieren und wie Sie einen geschützten Dienst programmgesteuert authentifizieren und aufrufen können. Stellen Sie eine andere Frage und ich werde sie beantworten. Stellen Sie sicher, dass Sie Details zu der Plattform und dem Authentifizierungsschema angeben, z. B. IIS, Asp.net-Webservice, FormsAuthentication usw. Es scheint, dass Sie möglicherweise einen www-auth-Header hinzufügen müssen. –

+0

Nun, das ist, unser Provider verwendet Vordel, die kein WSDL verfügbar macht (es stellt stattdessen eine URL zur Verfügung, die alle verfügbaren Operationen "verdunkelt"), so dass ich verloren habe, wie man einen Proxy mit wsdl.exe (und das ist das einzige, was ich möchte - den Proxy generieren). Ich weiß, dass der Dienst funktioniert, und ich kann es mit SoapUI testen, indem ich einen neuen Endpunkt für ein bereits generiertes WSDL-Projekt erstelle und die user/pass-Eigenschaften fülle. Ich habe versucht, in VS2008 eine zufällige WS-Referenz zu generieren, aber da ich nicht weiß, welche Eigenschaften durch den "echten" Dienst verfügbar gemacht werden, kann ich den Code nicht einfach ändern. (Danke für Ihre Hilfe!) – ditto1977

6

Es klingt, als ob Sie versuchen, eine Web-Referenz und keine Service-Referenz zu verwenden (obwohl ich glaube, dass eine Web-Referenz eine Art von Service-Referenz ist). Nachdem Sie in VS08 "Service-Referenz hinzufügen" gestartet haben, geben Sie die URL für den Web-Service ein, klicken Sie auf die Schaltfläche "Erweitert" und dann auf "Web-Referenz hinzufügen". Geben Sie die URL erneut ein und klicken Sie dann auf "Web-Referenz hinzufügen". Jetzt sollten Sie stattdessen eine Web-Referenz haben, dann ist die Authentifizierung unter ähnlich:

WebService.Service myService = new WebService.Service(); 
myService.Credentials = new System.Net.NetworkCredential("username", "password"); 
WebService.ResultType results = myService.MyMethodReturnsResultType(); 
3

späte Antwort, aber man kann es auch bekommen zu arbeiten, wenn Sie Ihre Website in der Visual Studio-Web-Browser öffnen und melden Sie sich in nur funktioniert. wenn Ihr Authentifizierungsmodell Cookies unterstützt.

+1

+1 - Dies funktionierte perfekt für mich beim Versuch, eine SaleForce WSDL zu aktualisieren, die hinter einer Login-Seite war. In Visual Studio 2013 können Sie einen Webbrowser öffnen, indem Sie im oberen Menü Ansicht -> Andere Windows -> Webbrowser klicken – drobison

0

Wenn Sie den Code mit WSDL generieren können Sie die GetWebRequest() -Methode außer Kraft setzen, die Ihnen erlaubt, den Authorization-Header

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
{ 
    var req = base.GetWebRequest(uri); 
    req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("username:password"))); 
    return req; 
}