我正在尝试使用我们的提供商从C#App中使用Java编写的WebService。什么时候沟通,我明白了:
WSDoAllReceiver:传入消息不包含必需的安全标头
从昨天开始,我正在尝试了解如何将安全标头添加到SOAP消息中。
是的,我读过这篇文章(Clueless about how to create SOAP <wsse:Security> header),但它没有用。
我环顾四周,这似乎是个问题。我想知道我是否可以在这里得到一些帮助,一些指针,一些代码,让我开始。答案 0 :(得分:14)
我实际上通过使用WSE实现了这一目标。有趣的是,提供商的Web服务不适用于WSE 3.0,但他们使用WSE 2.0。以下是步骤
替换
public partial class UserWS : System.Web.Services.Protocols.SoapHttpClientProtocol
通过
public partial class UserWS : Microsoft.Web.Services2.WebServicesClientProtocol
设置身份验证信息
UsernameToken token = new UsernameToken("user", "pwd", PasswordOption.SendPlainText);
yourProxy.RequestSoapContext.Security.Tokens.Add(token);
就是这样!仅供参考,提供者是Blackboard个实例。
答案 1 :(得分:1)
尝试一下。无需webreference和Web.Services2实施。
var client = "Your Service Client";
using (var scope = new OperationContextScope(client.InnerChannel))
{
System.Xml.XmlDocument document = new XmlDocument();
XmlElement element = document.CreateElement("wsse", "UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
XmlElement newChild = null;
newChild = document.CreateElement("wsse", "Username", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
newChild.InnerText = "finance";
element.AppendChild(newChild);
newChild = document.CreateElement("wsse", "CorporationCode", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
newChild.InnerText = "387";
element.AppendChild(newChild);
MessageHeader messageHeader = MessageHeader.CreateHeader("UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", element, false);
OperationContext.Current.OutgoingMessageHeaders.Add(messageHeader);
var result = client.GetCorporations(new CorporationType { pageNo = 1 });
}