1

我正在使用这个 ->>链接 <<- 在 wcf 中设置自定义消息头的所有代码,但我无法在 android 中获取这些头信息。如果有人对android有任何经验。如何在android中获取这些类型的自定义消息头值。

就像 C# 中的这段代码

public class SimpleCustomHeaderService : ISimpleCustomHeaderService
{
    public string DoWork()
    {
        //Do Work
        //...

        //Capture Headers
        var userName = GetHeader("web-user", "ns");
        var webNodeId = GetHeader("web-node-id", "ns");
        var webSessionId = GetHeader("web-session-id", "ns");

        Debug.WriteLine("User: {0} / Node: {1} / Session: {2}", userName, webNodeId, webSessionId);
        var s = string.Format("HeaderInfo: {0}, {1}, {2}",
            userName,
            webNodeId,
            webSessionId);

        return s;
    }

    private static T GetHeader(string name, string ns)
    {
        return OperationContext.Current.IncomingMessageHeaders.FindHeader(name, ns) > -1
            ? OperationContext.Current.IncomingMessageHeaders.GetHeader(name, ns)
            : default(T);
    }
}

但是我正在像这样在android中做这些设置标题信息,但无法获取。获取标头信息所需的更改是什么。

方法一

 private static final String    NAMESPACE   = "http://tempuri.org/";
 Element[] header = new Element[1];
 header[0]=buildAuthHeader();
 envelope.headerOut = header;
 Log.i("header", "" + envelope.headerOut.toString());

    envelope.dotNet = false;
    envelope.bodyOut = request;
    envelope.setOutputSoapObject(request);
    int Timeout = 15 * 1000;
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,1000*60*2);
    Log.i("bodyout", "" + envelope.bodyOut.toString());
    Log.i("REQUEST", "" + request.toString());

    try{
        androidHttpTransport.debug = true;
        androidHttpTransport.call(SOAP_ACTION, envelope);

        SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
        returnString = response.toString();
        Log.i("RESPONSE==", response.toString());

private Element buildAuthHeader() {
        String n_s = "ns";
            String web_user_test="john";
    int node_id=1234554;
    //String gid= UUID.randomUUID().toString();
    //String xmlns_soap1="http://schemas.xmlsoap.org/wsdl/soap/";
    //String Namespace="http://www.w3.org/2005/08/addressing";
    //String xmlns_soap="http://schemas.microsoft.com/2003/10/Serialization/";
    Element h = new Element().createElement(NAMESPACE, "ns");
    Element first = new Element().createElement(NAMESPACE, "web-user");
    first.addChild(Node.TEXT,web_user_test);
    h.addChild(Node.ELEMENT, first);

    Element second = new Element().createElement(NAMESPACE, "web-node-id");
    second.addChild(Node.TEXT, String.valueOf(node_id));
    h.addChild(Node.ELEMENT, second);

    Element third = new Element().createElement(NAMESPACE, "web-session-id");
    third.addChild(Node.TEXT, String.valueOf(UUID.randomUUID()));
    h.addChild(Node.ELEMENT, third);
        return h;
    }

我有输出: RESPONSE== HeaderInfo: , 0, 00000000-0000-0000-0000-000000000000

方法二

我也做了这个替代设置标题:

            U= new User();
    U.setProperty(0, "horrorgoogle");
    U.setProperty(1,node_id);
    U.setProperty(2,UUID.randomUUID().toString());

    headerList.add(new HeaderProperty("web-user", U.getProperty(0).toString()));
    headerList.add(new HeaderProperty("web-node-id", U.getProperty(1).toString()));
    headerList.add(new HeaderProperty("web-session-id", U.getProperty(2).toString()));

   androidHttpTransport.call(SOAP_ACTION, envelope,headerList);

两种方法我也有同样的错误。

我有输出: RESPONSE== HeaderInfo: , 0, 00000000-0000-0000-0000-000000000000

请您找出我的代码错误在哪里。我很高兴,如果你真的帮助我解决这个我的大问题。

非常感谢您阅读我的问题。

4

1 回答 1

1

我认为您没有正确设置标题。我没有看到你在哪里设置了 header[0]。也许你必须插入这行代码

envelope.headerOut = header;
于 2014-04-25T07:30:19.820 回答