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>
成功!