[Android初级]调用基于WCF开发的WebService出现的问题

    我在以前的一次项目开发中遇到过这样的问题,因为是小项目,服务端用的是.net中的WCF技术开发的webservice,我在android中调用的时候出现了一些问题,比如,我按要求发送了数据,返回的异常错误:

Code: s:Sender, Reason: 由于 AddressFilter 在 EndpointDispatcher 不匹配,To 为“”的消息无法在接收方处理。请检查发送方和接收方的 EndpointAddresses 是否一致。

at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:149)

这个情况,我一开始也不知道是为什么,我一开始是认为Soap的协议规范弄错了,我试了SoapEnvelop.VER11和12,都依然无法解决问题。

最后在国外的网站上看到了解决方案:

这是我的一段代码

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER12);
		envelope.bodyOut = soapObject;
		envelope.dotNet = true;
		envelope.implicitTypes = true;
		envelope.headerOut = buildHeader(Urls.SERVICE_URL, soapAction);		

这个是buildHeader(x,x)方法

public static Element[] buildHeader(String url, String soapAction) {
		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;
	}
希望能帮助你解决和我相似的问题。




你可能感兴趣的:(android,webservice)