xml 経由で wcf サーバーと通信する Android でログイン アクティビティを作成しようとしています。
Get Requests は問題なく動作しますが、Post は Request Error を返します。webtracelog には次の情報が表示されます。
「タイプ LoginMobileParameter のオブジェクトの開始要素をチェック中にエラーが発生しました。ルート レベルのデータが無効です。行 1、位置 1。」
xml に問題があると思われますが、特定できません。
サーバー部分:
ログインパラメータ:
[DataContract]
public class LoginMobileParameter
{
[DataMember(Order = 1)]
public string Username { get; set; }
[DataMember(Order = 2)]
public string Password { get; set; }
[DataMember(Order = 3)]
public string DeviceID { get; set; }
}
I サービス:
[OperationContract]
[WebInvoke(
UriTemplate = "Security/LoginMobile",
Method = "POST",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml
)]
string LoginMobile(LoginMobileParameter parameter);
サービス:
public string LoginMobile(string userName, string password, string deviceID)
{
string decryptedPw = ServiceFactory.EncryptionService.DecryptString(password);
bool loginOK = dataService.CheckLogin(userName, decryptedPw);
if (loginOK)
{
Token t = NewToken;
t.Username = userName;
t.DeviceID = deviceID;
string tokenString = dataService.SaveToken(t);
Log("LoginMobile " + deviceID + ": " + userName + ": Issued Token " + tokenString);
return tokenString;
}
Log("Invalid Username for mobile User " + userName + " / " + password);
return string.Empty; // not authorized
}
クライアント部分:
XmlGenerator:
public class XmlGenerator {
public static String GenerateLoginXml(String user, String password){
String returnstring = "";
returnstring += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
returnstring += "<LoginMobileParameter><Username>";
returnstring += user;
returnstring += "</Username><Password>";
returnstring += password;
returnstring += "</Password><DeviceID>androidclient</DeviceID></LoginMobileParameter>";
return returnstring;
}
}
ログインボタン:
...
String xml = XmlGenerator.GenerateLoginXml(username, password);
String url = "security/loginmobile";
String result = con.post(xml, url);
役職:
public class HttpConnection {
public String post(String data, String parameter) {
String urlToSendRequest = "http://my.server.com:1234/Service/" + parameter;
String result = "";
HttpPost httpPost = new HttpPost(urlToSendRequest);
try {
StringEntity entity = new StringEntity(parameter, HTTP.UTF_8);
entity.setContentType("application/xml");
httpPost.setHeader("Content-Type", "application/xml;charset=UTF-8");
httpPost.setEntity(entity);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
result = EntityUtils.toString(responseEntity);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return result;
たくさんのスレッドを読み、すべてを試しましたが、うまくいきませんでした。前もって感謝します