这是一个可能有人可以扩展的快速答案。
当您使用 WSDL 模板应用程序 (WSDL.exe) 生成服务包装器时,它会构建一个 SoapHttpClientProtocol 类型的类。您也可以手动完成:
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]));
}
}
我没有测试过这段代码,但我想它应该可以独立运行,而无需运行 WSDL 工具。
我提供的代码是调用者代码,它通过远程调用连接到 Web 服务(即使出于某种原因,您实际上并不希望它是远程的。) Invoke 方法负责将其打包为肥皂电话。如果您想通过 HTTP 绕过 Web 服务调用,@Dave Ward 的代码是正确的——只要您实际上能够引用该类。也许内部类型不是“MyService”——您必须检查控件的代码才能确定。