简体   繁体   English

使用C#消费SOAP / SSO

[英]Consume SOAP/SSO using C#

Which is the easiest way to consume a WSDL SOAP/SSO using C# ? 使用C#来使用WSDL SOAP / SSO的最简单方法是什么?

This is a third party system and i get this response: 这是第三方系统,我得到以下答复:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <RetornaEstadosPorMarcaResponse xmlns="http://WebService-MultiLogin-2013/">
      <RetornaEstadosPorMarcaResult>
        <EstadosMDL>
          <ID>int</ID>
          <Nome>string</Nome>
          <Sigla>string</Sigla>
        </EstadosMDL>
        <EstadosMDL>
          <ID>int</ID>
          <Nome>string</Nome>
          <Sigla>string</Sigla>
        </EstadosMDL>
      </RetornaEstadosPorMarcaResult>
    </RetornaEstadosPorMarcaResponse>
  </soap:Body>
</soap:Envelope>

And this is how i'm calling it: 这就是我所说的:

public AdminMaster.RetornaEstadosPorMarca.Estados ssoEstados = new AdminMaster.RetornaEstadosPorMarca.Estados();

ssoEstados.RetornaEstadosPorMarca(Library.Configuracoes.ChaveSSO, Convert.ToInt16(Library.Configuracoes.Marca));

I have already tried to receive it as a string and format it to use as XML but it didn't work because of <soap:Body> and <soap:Envelope> , i get an error because i have the ':' on the name and i don't think that's the easiest way to do it. 我已经尝试过将其接收为字符串并将其格式化为XML格式,但由于<soap:Body><soap:Envelope>而无法正常工作,我收到了错误消息,因为在名称,我认为这不是最简单的方法。

So, how do i access the information from the response ? 那么,如何从响应中访问信息? Is there another way ? 还有另一种方法吗?

EDIT: 编辑:

After several hours and tests i finally found the problem, "my" SOAP also gives me a class to create a object to receive the response, i only had to use it: 经过几个小时的测试,我终于找到了问题,“我的” SOAP也给了我一个类来创建一个对象来接收响应,我只需要使用它:

//Here i have the object with the methods
private Library.ssoEstados.Estados objEstadosSSO = new Library.ssoEstados.Estados();

//Here i have the object to receive the response    
private Library.ssoEstados.EstadosMDL[] objEstadosMDL;

Than it was only a matter of read the values i wanted and send it to my own object. 不仅仅是读取我想要的值并将其发送到我自己的对象。

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(inputXml);
XmlNamespaceManager namespaces = new XmlNamespaceManager(xDoc.NameTable);
namespaces.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
namespaces.AddNamespace("ns2", "http://tempuri.org/");
XmlNode accountNode = xDoc.SelectSingleNode("/soapenv:Envelope/soapenv:Body/ns2:RetornaEstadosPorMarcaResponse/RetornaEstadosPorMarcaResult", namespaces);
XmlNode xnlAccount = accountNode.ChildNodes[0];
if (xnlAccount != null)
{
    XmlDocument xAccount = new XmlDocument();
    xAccount.LoadXml(xnlAccount.InnerText);
}

inputXml is a string containing your response xml. inputXml是包含您的响应xml的字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM