C#ASP.Net:如何在不使用WSDL或代理类的情况下调用.Net 4.0 C#中的web服务

本文关键字:Net 调用 情况下 服务 web 中的 C#ASP WSDL 代理 | 更新日期: 2023-09-27 18:20:10

我必须通过POST命令向web服务发送一些XML数据,我根本没有关于web服务的信息,我只知道我需要向它发送一个XML流,我知道服务器IP地址和端口,参数的XML树。除此之外,我对如何使用此web服务并获得响应打赌输了。我从未使用过Web服务,所以请理解我的代码是否有一些重大错误,并指导我:

public  void Execute()
    {
        HttpWebRequest request = CreateWebRequest();
        XmlDocument soapEnvelopeXml = new XmlDocument();
        soapEnvelopeXml.LoadXml(@"<?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> 
                    <mergeprofiles xmlns=""http://127.0.0.1:90"">
                    <Profile>
                    <Member>278615</Member>
                    <ExtRef>003D000001StY68IAF</ExtRef>zs 
                    <Name>LESCA</Name>
                    <ChangedBy>user</ChangedBy>
                    <FirstName>Paolo</FirstName>
                    <Street1>via magnanina 3947</Street1>
                     <Street2></Street2>
                    <Street3></Street3>
                    <City>VIGEVANO</City>
                    <ZIP>27029</ZIP>
                    <EMail>test@test.it</EMail>
                    <Phone></Phone>
                    <MobilePhone>+39331231233</MobilePhone>
                    <Fax></Fax>
                    <ISOLanguage>en</ISOLanguage>
                    <Salut1>Mr</Salut1>
                    <Homepage></Homepage>
                    <VATNo1>0</VATNo1>
                    </Profile>
                    <EndOfMessage>@@@</EndOfMessage>
                    </mergeprofiles>
</soap:Body>
</soap:Envelope>");

using (Stream stream = request.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }
        using (WebResponse response = request.GetResponse())
        {
            using (StreamReader rd = new StreamReader(response.GetResponseStream()))
            {
                string soapResult = rd.ReadToEnd();
                Console.WriteLine(soapResult);
            }
        }
    }
    /// <summary>
    /// Create a soap webrequest to [Url]
    /// </summary>
    /// <returns></returns>
    public HttpWebRequest CreateWebRequest()
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"http://127.0.0.1:90/");
        webRequest.Headers.Add(@"SOAP:Action");
        webRequest.ContentType = "text/xml;charset='"utf-8'"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        return webRequest;
    }

问题是,每当我在page_load中调用方法Execute时,它都会不断运行,从未停止。当我使用其他方法调用时,web服务正在工作,我不知道这是如何发生的,也不知道为什么会发生,你能帮忙吗?

C#ASP.Net:如何在不使用WSDL或代理类的情况下调用.Net 4.0 C#中的web服务

尝试以下文章中的一些步骤:

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

WebAPI是最新一轮的.NET服务框架,它与代码生成的SOAP类有很大不同。对你来说特别有用的可能是以下方法:

response = await client.PostAsync("your url", new StreamContent(yourStream));

如果您正在使用<NET 4.5,您可能无法使用此语法。在这种情况下,请尝试使用以下答案:

.NET:用数据发送POST并读取响应的最简单方法