繁体   English   中英

如何使用自定义标头来使用SOAP服务

[英]How to consume SOAP service with custom header

我需要从供应商处使用SOAP服务。 我在visual studio中使用WSDL创建了一个代理服务,实例化了客户端类,称为操作方法,并得到了响应。 一切正常,直到供应商在soap信封标题中要求访问令牌。 我可以在另一个服务调用中从它们获取访问令牌,但是如何将其添加到soap请求标头中?
以下是供应商标题的结构:

<SOAP:Header> 
    <SOAP-SEC:Security SOAP:mustUnderstand="1">
      <wsse:SecuredKey ValueType="..." EncodingType="wsse:Base64Binary">
        {ACCESS TOKEN}
      </wsse:SecuredKey>
    </SOAP-Sec:Security>
  </SOAP:Header>
  <SOAP:Body/>
</SOAP:Envelop>

到目前为止,最简单的方法是在模板中使用字符串替换。 将消息存储为项目中的资源(例如,在Resources.resx中或另存为文件并将set build action设置为嵌入式资源)。 模板看起来像这样:

<SOAP:Header> 
    <SOAP-SEC:Security SOAP:mustUnderstand="1">
      <wsse:SecuredKey ValueType="..." EncodingType="wsse:Base64Binary">
        {ACCESS TOKEN}
      </wsse:SecuredKey>
    </SOAP-Sec:Security>
  </SOAP:Header>
  <SOAP:Body/>
</SOAP:Envelop>

从模板中将模板作为字符串加载,然后调用Web服务以获取访问令牌,并使用实际访问令牌替换{ACCESS TOKEN} 您现在可以使用例如System.Net.Http.HttpClientSystem.Net.WebClient发送soap消息。

使用WebClient示例

using (var client = new WebClient())
{
    var result = client.UploadString("http://your.target/endpoint", yourXDocument.ToString(SaveOptions.DisableFormatting));                
    return XDocument.Parse(result);
}

SaveOptions.DisableFormatting不会尝试打印XDocument ,这在使用带有WS-Security的签名xml文档时非常重要。 不确定是否适用于您的情况。

暂无
暂无

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

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