在ASP.NET中调用SOAP webservices运行时

时间:2010-01-08 11:33:03

标签: c# web-services

如何在运行时从ASP.NET代码调用SOAP Web服务,而不是在编译时将它们添加为引用/ Web引用。 这假设应用程序知道Web服务URL列表,调用每个URL所需的方法和参数。

提前致谢 维杰

1 个答案:

答案 0 :(得分:1)

假设您要调用以下方法:

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

[WebMethod]
public string HelloWorld(Foo foo)
{
    return "Hello World";
}

您需要构建正确的SOAP信封:

using (WebClient client = new WebClient())
{
    client.Headers.Add("SOAPAction", "\"http://tempuri.org/HelloWorld\"");
    client.Headers.Add("Content-Type", "text/xml; charset=utf-8");
    var payload = @"<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><soap:Body><HelloWorld xmlns=""http://tempuri.org/""><foo><Id>1</Id><Name>Bar</Name></foo></HelloWorld></soap:Body></soap:Envelope>";
    var data = Encoding.UTF8.GetBytes(payload);
    var result = client.UploadData("http://example.com/Service1.asmx", data);
    Console.WriteLine(Encoding.Default.GetString(result));
}

解析生成的XML。