0

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;

たくさんのスレッドを読み、すべてを試しましたが、うまくいきませんでした。前もって感謝します

4

2 に答える 2

0

タグの前に、XmlGeneratorに以下を追加する必要があります。

returnstring += "<LoginMobileParameter xmlns=\"http://schemas.datacontract.org/2004/07/Projectname.Package.Parameter\">";

また、ライン

StringEntity entity = new StringEntity(parameter, HTTP.UTF_8);

データの代わりにurlパラメータを使用します。

于 2012-08-06T15:03:58.620 に答える
0

.ashx に投稿して、未加工の投稿データをテキスト ファイルに書き込んでみてください。

そのテキスト ファイルを 16 進エディタに入力し、BOM などの不要なバイトが XML に含まれていないかどうかを確認します。

于 2012-08-03T16:00:25.550 に答える