Android ksoap2 WCF wsHttpBinding

时间:2014-09-08 08:12:10

标签: android wcf ksoap2 wshttpbinding

我正在尝试将我的Android应用程序连接到WCF Web服务(IIS 6) basicHttpBinding一切正常,但我希望它更安全所以我设置了 WCF绑定到wsHttpBinding,我认为这对ksoap2来说有点棘手, 我收到一个错误:

  

代码:s:发件人,原因:无法处理邮件。    这很可能是因为行动'http://tempuri.org/IService1/HelloWorld'    不正确或因为邮件包含无效或过期的安全上下文令牌或    因为绑定之间存在不匹配。   如果服务因不活动而中止通道,则安全上下文令牌将无效。    要防止服务中止空闲会话,请提前增加接收超时    关于服务端点的绑定。

这是我的代码(android)

Element e = new Element();
    e.setName("To");
    e.setNamespace("http://www.w3.org/2005/08/addressing");
    e.addChild(Node.TEXT,
            URL);


    Element e1 = new Element();
    e1.setName("Action");
    e1.setNamespace("http://www.w3.org/2005/08/addressing");
    e1.addChild(Node.TEXT,
            "http://tempuri.org/IService1/HelloWorld");




    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER12);
    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

    //envelope.implicitTypes = true;
    envelope.dotNet = true;

    //envelope.headerOut =new Element[] { e, e1 };
    envelope.headerOut = buildHeader(URL, SOAP_ACTION);
    envelope.setOutputSoapObject(Request); // prepare request

    try {
        // androidHttpTransport.call(SOAP_ACTION, envelope);
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject result=(SoapObject)envelope.getResponse();
        String resultData=result.getProperty(0).toString();
        //Object result = envelope.getResponse();
        //SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
        //String resultData = result.toString();

        //msg = resultData;

    } catch (IOException | XmlPullParserException ex) {

        ex.printStackTrace();
        msg = ex.getMessage();
    }

我都这么试试:

private static Element[] buildHeader(String url, String soapAction) {

    String HTTP_ADDRESSING_ANONYMOUS = "http://www.w3.org/2005/08/addressing/anonymous";
    String HTTP_ADDRESSING = "http://www.w3.org/2005/08/addressing";
    String ACTION = "Action";
    String TO = "To";
    String ADDRESS = "Address";
    String REPLY_TO = "ReplyTo";
    String MUST_UNDERSTAND = "mustUnderstand";

    List<Element> headers = new ArrayList<Element>();
    Element elementAction = new Element().createElement(HTTP_ADDRESSING, ACTION);
    elementAction.addChild(Node.TEXT, soapAction);
    elementAction.setAttribute(HTTP_ADDRESSING, MUST_UNDERSTAND, "1");
    headers.add(elementAction);

    Element elementTo = new Element().createElement(HTTP_ADDRESSING, TO);
    elementTo.addChild(Node.TEXT, url);////////////////////////////
    elementTo.setAttribute(HTTP_ADDRESSING, MUST_UNDERSTAND, "1");
    headers.add(elementTo);

    Element elementReplyto = new Element().createElement(HTTP_ADDRESSING, REPLY_TO);
    Element address = new Element().createElement(HTTP_ADDRESSING, ADDRESS);
    elementReplyto.addChild(Node.ELEMENT, address);
    address.addChild(Node.TEXT, HTTP_ADDRESSING_ANONYMOUS);
    elementReplyto.setAttribute(HTTP_ADDRESSING, MUST_UNDERSTAND, "1");
    headers.add(elementReplyto);

    int size = headers.size();
    Element[] array = new Element[size];
    for (int i = 0; i < size; i++) {
        array[i] = headers.get(i);
    }
    return array;
}       

可以有人帮忙

0 个答案:

没有答案
相关问题