Web Services 我不知道如何使用C#ASP.NET执行Soap请求

lfapxunr  于 2022-11-15  发布在  C#
关注(0)|答案(1)|浏览(146)

我已经尝试了几个小时来向我的Soap Client(SoapUI)发出请求,阅读文档或回收代码(是的,对不起),但我无法发出简单的请求。
我想做的很简单:

  • 用户插入CustomerId和邮件
  • CustomerId会转到我的HomeController
  • HomeController向Soap客户端发出请求
  • 用户收到包含更多信息的邮件PDF文件。

就这样了
一些代码:

//Receive parameters from Html
 [HttpPost]
 public ActionResult ConexionWS(string customerId, string mail)

 //Connect to client with the authentication
 SoapClient client = new SoapClient(binding, wsdl);
 client.ClientCredentials.UserName.UserName = userN;
 client.ClientCredentials.UserName.Password = _pasw;
 client.Open();

 XmlDocument soapEnvelopeXml = GetSoapString(customerId);
 HttpWebRequest webRequest = CreateWebRequest(address, _action);
 InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

        private static HttpWebRequest CreateWebRequest(string url, string action)
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.Headers.Add("SOAPAction", action);
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        return webRequest;
    }

    private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
    {
        using (Stream stream = webRequest.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }
    }

发送CustomerId的XML:

private static XmlDocument GetSoapString(string customerId){
  <urn:ZWsCustomerInvoiceGetList>
               <Customerid>"+customerId+"</Customerid>
               <Pedido1></Pedido1>                             
               <Pedido2></Pedido2>            
               <TFacturaMat>                    
                   <item>                            
                      <Food></Food>              
                      <Drink></Drink>              
                      <Souvenir></Souvenir>              
                   </item>                           
               </TFacturaMat>
</urn:ZWsCustomerInvoiceGetList>}

我期望的XML:

<urn:ZWsCustomerInvoiceGetList>
               <Customerid>"+customerId+"</Customerid>
               <Pedido1></Pedido1>                             
               <Pedido2></Pedido2>            
               <rests>                    
                   <item>                            
                      <Food>Meal</Food>              
                      <Drink>Water</Drink>              
                      <Souvenir>Nothing</Souvenir>             
                   </item>                           
               </rests>
</urn:ZWsCustomerInvoiceGetList>

我的问题:

  • 我不明白CreateWebRequest中的“action”参数是什么
  • System.Xml.XmlException:“http”是意外的标记。标记应为""或“”。GetSoapString中的第1行,位置33。“
  • 我不知道如何使用Visual Studio在Reference.cs中提供的引用。

我很抱歉这么长的文字。我不知道如何做到这一点。这是我的第一个Web服务,这似乎是不可能的。

41zrol4v

41zrol4v1#

SOAPAction是终结点URL。
就像这样:

headers.addHeader("SOAPAction", endpointURL);

相关问题