繁体   English   中英

在C#中发送之前读取SOAP标头

[英]Read SOAP header before sending in C#

我使用wsdl.exe在C#中生成一个类来调用Web服务。 只要此Web服务不需要标题,就可以正常工作。 现在,我需要添加一个标题,如下所示:

<soapenv:Header>
  <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <wsse:UsernameToken>
        <wsse:Username>myUsername</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
     </wsse:UsernameToken>
  </wsse:Security>

因此,我添加了一个带有内部UsernameToken类的Security类,其中包含Username和Password,并将其添加到调用类中。 捕获整个SOAP消息(发送出去)的问题可以通过SOAP扩展解决。 我可以实现:

<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <UsernameToken>
       <Username>username</Username>
       <Password>verysecret</Password>
    </UsernameToken>
</Security>

因此,现在我缺少此wsse部分和密码标记中的“类型”属性了吗? 如何才能做到这一点? 我应该改用[MessageContract]吗? 或者我可以只是“硬编码”字符串并将其放在标题中?

您有几个问题要回答,但要回答“尽管如此,我最大的问题是现在(我看不到)实际上是作为标题发送的。” 您可以在方法private void CallWebSvcCallAsync(model.WebSvcMethod webSvcMethod)看到SOAP信封

var call = new websvcasync.Operations.CallAsyncOp(webSvcMethod, _cancelToken, State.Instance.ConfigProxy, State.Instance.ConfigTimeout.Timeout);上设置一个断点 并检查webSvcMethod.SampleReqMsg 它将使您了解正在邮寄什么信封。

如果您可以对SOAP信封结构进行排序,那应该很好。

暂无
暂无

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

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