1

我是一名 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 之下。非常感谢您的回应和耐心。:(
4

0 回答 0