如何在android中获取wcf服务的自定义消息头

我正在使用这个 – >> link << – 在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中设置这些设置头信息,但无法得到。 获取标头信息所需的更改是什么。

方法1

  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

方法2

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

  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

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

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

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

 envelope.headerOut = header;