欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 调用使用 Java 编写的带用户名密码验证的 WebService

程序员文章站 2022-06-13 21:00:36
...

最近项目里面需要调用一个接口,开发方是使用 Java 开发的,而我这边是使用 C# 编写的代码。在添加了服务引用以后,并没有在提供的方法或属性里面找到输入用户名和密码的地方。

结果研究了两天发现,只需要按照接口开发方提供的字段名称,把 Headers 写在自动生成的 app.config 中 endpoint 节点即可。

这是接口开发方给的部分代码:

System.out.println("开始查找用户信息");
List<Header> headers = sope.getHeaders();
if (headers == null || headers.size() < 1) {
    throw new Fault(new IllegalArgumentException("找不到 Header。"));
}
Header header = headers.get(0);
Element el = (Element)header.getObject();
NodeList users = el.getElementByTagName("username");
NodeList passwords = el.getElementByTagName("password");
if (users.getLength() < 1) {
    throw new Fault(new IllegalArgumentException("找不到用户信息。"));
}
String username = users.item(0).getTextContent().Trim();
if (passwords.getLength() < 1) {
    throw new Fault(new IllegalArgumentException("找不到用户密码。"));
}
String password = passwords.item(0).getTextContent().Trim();

我这边的 app.config 文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name=XXXX />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address=XXXX binding=XXXX bindingConfiguration=XXXX
          contract=XXXX name=XXXX>
        <headers>
          <UserInfo>
            <username>用户名写在这里</username>
            <password>密码写在这里</password>
          </UserInfo>
        </headers>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

成功!