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

时间:2014-06-17 07:58:30

标签: c# web-services soap

我使用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 extension来解决。我可以实现:

<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部分和&#34; Type&#34;密码标签中的属性? 如何才能做到这一点?我应该使用[MessageContract]吗? 或者我可以只是&#34;硬编码&#34;字符串并将其放在标题中?

1 个答案:

答案 0 :(得分:0)

你的问题中有几个问题,但要回答“不过我现在最大的问题是,我没看到,实际发送的内容是什么。”您可以在方法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信封结构进行排序,那么您应该很高兴。