2012-04-27 8 views
0

アンドロイド携帯に保存されている情報をWCFサービスに保存しようとしています。私は電話から400エラーが発生していると私は私のlocalhost上でテストするときに私のVisual Studioのポップアップは、私の保存メソッドでnullポインタをポップアップを使用して、サーバーに同じ要求を送信しようとするとき。私はTシャツにこの例を、以下、そのだけで動作していないよ:TutorialJSON 400不良リクエストとヌルポインタを使用してAndroidからWCFへ

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

[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; } 
} 

運用契約が

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

^このメソッドは、ユーザーがnullなのでnullポインタを投げています。 WebMessageBodyStyleをWrappedRequestに変更しようとしましたが、それは役に立ちません。

HERESにPOSTリクエストを送信するためのアンドロイドコード:

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エラーを与えています。

は、ここではlocalhostにJSONを送信するシオマネキです:Here's the picture は、私は、コンテンツの長さを追加しましたが、絵で、それはそれが本当に任意の助けをいただければ幸い 86で0を言います。あなたは、私はバイト[]それは本当に文字列とするときJSONオブジェクトだったを送ったかを見れば

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

{"userid":1,"username":"testuser","password":"testpassword","information":null} 
+0

代わりに 'JSONObject'と' JSONObject.toString() 'を使うことをお勧めします。もっと明確で便利です。 –

+0

Fiddlerを使用してリクエストを検査しようとしましたか? – Rajesh

+0

私は下部にフィドラー – slai47

答えて

0

FiddlerからPOSTリクエストを実行すると、あなたの要求は、以下のようなものでなければなら試してみてくださいサービスはこの情報文字列をどこに置くべきか分からない。私はこれを見つけた後、完全なノブのように感じる。

+0

メインポストに画像を追加しました。私はあなたが尋ねたものに従って、そのコンテンツの長さを追加しました。それはまだ400を送り返しました。 – slai47

+0

私は忘れてしまったので、私はそれにポートを追加し、Visual Studioはまだサービスに送信されているユーザーにnullポインタを置いた。だから、今はその要求を得る。 – slai47

+0

生のリクエストの様子を投稿できますか? – Rajesh

0

何度か不正リクエストは間違ったエラーです。 たとえば、WCFサーバー側でWritePermissionExceptionがある場合、この不正リクエストが発生する可能性があります。それはあなたを混乱させるかもしれませんし、あなたのJSON文字列やあなたの要求に関連するものを疑わしいものにするかもしれませんが、本当に原因となった項目は無関係です。この血まみれをデバッグするのに多くの時間がかかった不正リクエスト。 は、だから私の意見では:このエラーを解決するために

最良の方法は次のとおりです。WCFサービスのweb.configファイルで診断設定を有効にする

<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="xml" /> </listeners> </source> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="xml" /> </listeners> </source> <source name="myUserTraceSource" switchValue="Information, ActivityTracing"> <listeners> <add name="xml" /> </listeners> </source> </sources> <sharedListeners> <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Traces.svclog" /> </sharedListeners> </system.diagnostics>

  • そして、あなたは、WCFから公開ローカルIISにホストして、ローカルに

それを呼んで注意している場合:メソッドWCF RESTを呼び出すためにをchrome/firefoxの拡張機能として利用できるRESTクライアントアドバンストRESTクライアントなど)を使用できます。

関連する問題