0

Androidフォンに保存されているユーザーからの情報をWCFサービスに保存しようとしています。電話から 400 エラーが発生し、fiddler を使用して同じ要求をサーバーに送信しようとすると (localhost でテストする場合)、ビジュアル スタジオが save メソッドに null ポインターをポップアップします。私はティーにこの例に従っていますが、うまくいきません:チュートリアル

ここに私のコードの一部があります: WCF サービスの私のユーザー オブジェクトは次のとおりです。

[DataContract]
public class User
{
    [DataMember(Name= "userid")]
    public int UserId { get; set; }
    [DataMember(Name = "username")]
    public string username { get; set; }
    [DataMember(Name = "password")]
    public string password { get; set; }
    [DataMember(Name = "information")]
    public Byte[] information { get; set; }
}

私のIServiceでの運用契約

    [OperationContract]
    [WebInvoke(Method = "POST",
        BodyStyle = WebMessageBodyStyle.Bare, 
        ResponseFormat = WebMessageFormat.Xml, 
        RequestFormat= WebMessageFormat.Json,
        UriTemplate = "saveUser")]
    Boolean saveUser(User user);

^ ユーザーが null であるため、このメソッドは null ポインターをスローしています。WebMessageBodyStyle を WrappedRequest に変更しようとしましたが、解決しません。

POST リクエストを送信するための Android コードは次のとおりです。

JSONStringer user = new JSONStringer()
                .object()
                    .key("user").object()
                    .key("userid").value("1").key("username").value(appState.getCurrentUser().username)
                        .key("password").value(appState.getCurrentUser().password)
                        .key("information").value(str.toString())
                    .endObject()
                .endObject();
            StringEntity entity = new StringEntity(user.toString());
            HttpPost request = new HttpPost(new URI(url));
            request.setHeader(HTTP.CONTENT_TYPE, "application/json");
            request.setHeader("Accept", "application/json");

            request.setEntity(entity);
HttpResponse response = httpClient.execute(request);

^ サーバーからの応答で 400 エラーが返されます。

json をローカルホストに送信するフィドラーは次のとおり です。コンテンツの長さを追加した画像を次に 示しますが、画像では 0 と表示されています。実際には 86 です。

4

3 に答える 3

0

私がbyte[]をどのように送信していたかを見ると、それは実際には文字列であり、JSONオブジェクトがサービスに到達したとき、サービスはこの情報文字列をどこに置くかを理解できませんでした。これを見つけた後、私は完全な初心者のように感じます。

于 2012-05-01T03:46:31.900 に答える
0

Fiddlerから POST リクエストを実行してみてください。リクエストは次のようになります。

POST http://localhost/SampleApp/Service1.svc/saveUser HTTP/1.1
Content-Type: application/json
Host: localhost

{"userid":1,"username":"testuser","password":"testpassword","information":null}
于 2012-04-27T09:43:01.090 に答える