WCF 서비스 용 Android 클라이언트를 개발 중입니다. 아무런 문제없이 서비스와 함께 작동하는 Windows 응용 프로그램이 있습니다. 그러나 kSoap2를 사용하여 Android에서 서비스를 사용하려고하면 500 개의 내부 서버 오류가 발생합니다. 분명히 나는 잘못된 것을하고 있지만 무엇을 알아 내지 못하고있다. 내 실패 호출 같은 방법의 HTTP 덤프 여기ksoap2를 사용하는 Android에서 WCF 서비스 사용 - 내부 서버 오류
POST /SignService HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Host: ariadnetest.ariadne.vn
Content-Length: 995
Connection: Keep-Alive
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:r="http://schemas.xmlsoap.org/ws/2005/02/rm" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<r:Sequence s:mustUnderstand="1">
<r:Identifier>urn:uuid:b6073cc9-d142-4045-90cb-1ae8d839d400</r:Identifier>
<r:MessageNumber>1</r:MessageNumber>
</r:Sequence>
<a:Action s:mustUnderstand="1">http://tempuri.org/ISignService/GetExistedSignData</a:Action>
<a:MessageID>urn:uuid:ad89a2da-6205-460b-b50c-9b354d83594d</a:MessageID>
<ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="9c91571d-e363-45da-ab5b-a83d48f3ec82">468b8556-f549-4d1f-969a-591aae05d4af</ActivityId>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">http://ariadnetest.ariadne.vn/SignService</a:To>
</s:Header>
<s:Body>
<GetExistedSignData xmlns="http://tempuri.org/">
<displayId>HWI_00:1E:8C:87:7F:8D</displayId>
</GetExistedSignData>
</s:Body>
</s:Envelope>
됩니다 : 여기
// SOAP consts
private static final String NAMESPACE = "http://tempuri.org/";
private static final String SERVICE_NAME = "/SignService";
private static final String SOAP_ACTION = "http://tempuri.org/ISignService/";
...
String url;
String method_name = "GetExistedSignData";
url = mServerAddress + SERVICE_NAME;
/* the connect logic goes here */
try {
SoapObject request = new SoapObject(NAMESPACE, method_name);
request.addProperty("displayId", "HWI_00:1E:8C:87:7F:8D");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet = true;
//envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(url);
androidHttpTransport.call(method_name, envelope);
sb.append(envelope.toString() + "\n");
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
//to get the data
String resultData = result.toString();
sb.append(resultData + "\n");
} catch (IOException e) {
sb.append("IO Problem:\n" + e.getMessage() + "\n");
} catch (XmlPullParserException e) {
sb.append("Parser Problem:\n" + e.getMessage() + "\n");
}
catch (Exception e) {
sb.append("Error:\n" + e.getMessage() + "\n");
}
성공적으로 메소드를 호출 Windows 클라이언트의 HTTP 덤프입니다 : 여기
내 자바 코드 : 대가로
POST /SignService HTTP/1.1
User-Agent: ksoap2-android/2.6.0+
Content-Type: application/soap+xml;charset=utf-8
Connection: close
Content-Length: 358
Host: ariadnetest.ariadne.vn
Accept-Encoding: gzip
<?xml version="1.0"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://www.w3.org/2003/05/soap-encoding" xmlns:v="http://www.w3.org/2003/05/soap-envelope">
<v:Header/>
<v:Body>
<GetExistedSignData xmlns="http://tempuri.org/">
<displayId>HWI_00:1E:8C:87:7F:8D</displayId>
</GetExistedSignData>
</v:Body>
</v:Envelope>
내가 얻을 :
,451,515,HTTP/1.0 500 Internal Server Error
Date: Tue, 13 Dec 2011 15:46:07 GMT
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 2114
Connection: close
오류 설명의 가장 유용한 부분은 말한다 :
Error Code 64: Host not available
Background: The connection to the Web server was lost.
나는 WCF에 익숙하지 않아요 및 .NET 그래서 내가 잘못 될 수 있는지에 대한 선택의 여지입니다. 안드로이드에서 소비해야하는 WCF 서비스를 개발하지 않았습니다.
다른 선택 사항은 무엇입니까? – ozmank