我使用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;字符串并将其放在标题中?
答案 0 :(得分:0)
你的问题中有几个问题,但要回答“不过我现在最大的问题是,我没看到,实际发送的内容是什么。”您可以在方法private void CallWebSvcCallAsync(model.WebSvcMethod webSvcMethod)
在var call = new websvcasync.Operations.CallAsyncOp(webSvcMethod, _cancelToken, State.Instance.ConfigProxy, State.Instance.ConfigTimeout.Timeout);
上设置一个断点并检查webSvcMethod.SampleReqMsg
。它会让您了解发布的信封。
如果您可以对SOAP信封结构进行排序,那么您应该很高兴。