15

我需要将soap 标头信息设置为Web 方法身份验证的一部分。我正在使用ksoap2 API 来调用 .NET Web 服务。这是带有请求的soap标头。

<soap:Header>
    <DTHeader xmlns="http://myServer.com/webservices/">
      <Username> string </Username>
      <Password> string </Password>
    </DTHeader>
</soap:Header>
<soap:Body>
    <MyTestMethod xmlns="http://myServer.com/webservices/">
       <ID> string </ID>
       <TransID> guid </TransID>
     </MyTestMethod>
</soap:Body>

您能否提供设置soap标头“DTHeader”并设置“用户名”和“密码”的android代码。

4

2 回答 2

29

我是这样做的:

import org.kxml2.kdom.Element;

然后在准备信封的时候

soapEnvelope.headerOut = new Element[1];
soapEnvelope.headerOut[0] = buildAuthHeader();
// ...send request...

private Element buildAuthHeader() {
    Element h = new Element().createElement(NAMESPACE, "AuthHeader");
    Element username = new Element().createElement(NAMESPACE, "user");
    username.addChild(Node.TEXT, USERNAME);
    h.addChild(Node.ELEMENT, username);
    Element pass = new Element().createElement(NAMESPACE, "pass");
    pass.addChild(Node.TEXT, PASSWORD);
    h.addChild(Node.ELEMENT, pass);

    return h;
}

显然,根据需要更改字符串。

于 2011-04-10T19:45:01.603 回答
10

花了 2 天时间试图让它与 java 和 .net 一起工作,终于让它工作了..

ArrayList<HeaderProperty> headerProperty = new ArrayList<HeaderProperty>();

headerProperty.add(new HeaderProperty("guid", "value..."));

androidHttpTransport.call(soap_action,envelope,headerProperty); 

尝试了上面的示例,并会添加一个标题部分,但与 .net 不兼容。

我的一段代码有效,但需要 KSoap2 版本 ksoap2-android-assembly-2.5.7-jar-with-dependencies.jar 来自这里:ksoap jar file location

右键单击并查看原始文件,然后单击另存为。

感谢论坛中的所有帮助,为我指明了正确的方向......

于 2011-07-10T13:09:27.493 回答