我是一名 Java 开发人员,就在今天,我开始为这个项目学习 C#。我需要创建一个将从 wsdl 调用服务的客户端。我已经让那部分运行了。我生成了一个 C# 类,它通过“ wsdl.exe ”将 wsdl 包装到服务中。我也能够实现它,我的问题是,我需要在发送请求时使用 wsse 标头。wsdl.exe 默认不提供,所以我稍微调整了我的代码,以便可以发送带有 wsse 标头的请求。这是我调用该服务的代码片段:
using Microsoft.Web.Services3.Security.Tokens;
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Security;
static void Main(string[] args)
{
//... some other code here ...
//create a credentials
UsernameToken usernameToken = new UsernameToken("myUsername", "myPassword");
//create a new instance of ApiService.
ApiService apiClient = new ApiService();
apiClient.Url = "http://something.com/something/soap/v2/";
SoapContext context = apiClient.RequestSoapContext;
context.Security.Tokens.Add(usernameToken);
context.Security.Elements.Add(new MessageSignature(usernameToken));
//call the sendFax method.
myResponse response = apiClient.SendMyRequest(myRequest);
}
这是我在调用“ sendRequest()
”时调用的代码片段。
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("MyResponse", Namespace="https://something.com/something/soap/v2", IsNullable=true)]
public myResponse SendMyRequest ([System.Xml.Serialization.XmlElementAttribute(Namespace="https://something.com/something/soap/v2", IsNullable=true)] myRequest MyRequest) {
Console.WriteLine("sending message... ");
object[] results = this.Invoke("SendMyRequest", new object[] {
MyRequest});
return ((myResponse)(results[0]));
}
//some other code here.
每当我点击运行时,我都会收到错误消息:
The security token could not be authenticated or authorized
现在,我的问题是:
- 有没有办法让我看到正在发送的肥皂请求?我记得在java中(当时我使用的是axis2),我会打开生成的服务并简单地打印env,然后形成的整个请求就会出来。我问是因为我想知道发送的请求是否正确。一旦我看到请求,也许我可以更正它。:)
- 我如何得到回应?(对不起,菜鸟问题。我环顾了谷歌,人们发布了请求而没有发布他们如何打印出来。哈哈。)
在这段代码中:
[something]
<----这叫什么?
public class hello {
//some code here
}
是啊,叫什么?原谅我,这种语法对我来说有点新鲜。告诉我它的术语,我会在谷歌上搜索它。
- 注意:代码中的大多数变量和类都已更改,因为我处于 NDA 之下。非常感谢您的回应和耐心。:(