2009-05-28 7 views
1

Ich habe eine Webreferenz erstellt von der WSDL, aber ich darf die Funktion nicht aufrufen, wenn ich nicht den Benutzernamen/das Passwort übergebe; der ursprüngliche Code für die XML-Toolkit war:HTTP-Authentifizierung mit Webreferenzen

Set client = CreateObject("MSSOAP.SOAPClient30") 
URL = "http://" & host & "/_common/webservices/Trend?wsdl" 

client.mssoapinit (URL) 

client.ConnectorProperty("WinHTTPAuthScheme") = 1 
client.ConnectorProperty("AuthUser") = user 
client.ConnectorProperty("AuthPassword") = passwd 

On Error GoTo err 
Dim result1() As String 

result1 = client.getTrendData(expression, startDate, endDate, 
       limitFromStart, maxRecords 

Wie füge ich die AuthUser/AuthPassword zu meinem neuen Code?

Neuer Code:

ALCServer.TrendClient tc = new WindowsFormsApplication1.ALCServer.TrendClient(); 

    foreach(string s in tc.getTrendData(textBox2.Text, "5/25/2009", "5/28/2009", false, 500)) 
     textBox1.Text+= s; 

Antwort

1

es gefunden: Auch wenn PreAuthenticate == Es stimmt, es es nicht tut. Sie haben die WebRequest overried:

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
    { 
     HttpWebRequest request; 
     request = (HttpWebRequest)base.GetWebRequest(uri); 

     if (PreAuthenticate) 
     { 
      NetworkCredential networkCredentials = 
       Credentials.GetCredential(uri, "Basic"); 

      if (networkCredentials != null) 
      { 
       byte[] credentialBuffer = new UTF8Encoding().GetBytes(
        networkCredentials.UserName + ":" + 
        networkCredentials.Password); 
       request.Headers["Authorization"] = 
        "Basic " + Convert.ToBase64String(credentialBuffer); 
      } 
      else 
      { 
       throw new ApplicationException("No network credentials"); 
      } 
     } 
     return request; 
    } 

Da es als Teilklasse erstellt wird, können Sie den Stummel in einer separaten Datei halten und die Reference.cs Wiederaufbau werden Sie nicht verprügeln.