我正在尝试将我的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;
}
可以有人帮忙