Hier ist eine kurze Antwort, die vielleicht jemand erweitern kann.
Wenn Sie die WSDL-Templating-App (WSDL.exe) verwenden, um Service-Wrapper zu erstellen, wird eine Klasse vom Typ SoapHttpClientProtocol erstellt. Sie können dies auch manuell tun:
public class MyService : SoapHttpClientProtocol
{
public MyService(string url)
{
this.Url = url;
// plus set credentials, etc.
}
[SoapDocumentMethod("{service url}", RequestNamespace="{namespace}", ResponseNamespace="{namespace}", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int MyMethod(string arg1)
{
object[] results = this.Invoke("MyMethod", new object[] { arg1 });
return ((int)(results[0]));
}
}
Ich habe diesen Code nicht getestet, aber ich kann mir vorstellen, dass er eigenständig funktionieren sollte, ohne dass das WSDL-Tool ausgeführt werden muss.
Der Code, den ich zur Verfügung gestellt habe, ist der Aufrufer-Code, der den Webdienst über einen Remote-Aufruf aufruft (auch wenn Sie aus irgendeinem Grund nicht wollen, dass er remote ist). Die Invoke-Methode kümmert sich um die Verpackung als Soap-Aufruf. Der Code von @Dave Ward ist korrekt, wenn Sie den Webdienstaufruf über HTTP umgehen wollen - solange Sie tatsächlich in der Lage sind, die Klasse zu referenzieren. Vielleicht ist der interne Typ nicht "MyService" - Sie müssten den Code des Steuerelements untersuchen, um es genau zu wissen.