2013-04-05 60 views
1

我正在Android應用程序上工作,我有我的「POST」請求(像往常一樣)到我的WCF Restful WS的問題。Android發佈請求(JSON參數)到WCF restful WS

RESTful方法:

[OperationContract] 
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "createUser")] 
string createUser(string user); 

我爲了找錯誤我的方法實現的評論身下放的,現在它看起來像:

public string createUser(string user) 
     { 
     return user; 
     } 

我一直在呼籲這個方法數百次來自JS(jQuery,Ajax)和JSON.stringify(數據),沒有任何問題。 現在我需要從android應用程序做同樣的事情。 這可能是片斷的我的代碼引起的問題:

JSONObject user = new JSONObject(); 
user.put("id", "15"); 
user.put("name", "John"); 
user.put("city", "France"); 
user.put("email", "myemail"); 
user.put("password", "mypass"); 

HttpClient client = new DefaultHttpClient(); 
URI website = new URI("http://10.0.2.2/AutoOglasi/Service1.svc/createUser"); 
HttpPost request = new HttpPost(); 
request.setEntity(new StringEntity(user.toString())); 
request.addHeader("content-type", "application/json");  
request.setURI(website); 
HttpResponse response = client.execute(request); 

我正在從服務器的響應(沒有錯誤在我的客戶端):

The exception message is 'There was an error deserializing the object of type 
System.String. End element 'root' from namespace '' expected. Found element 'id' from 
namespace ''.'.See server logs for more details. The exception stack trace is: </p> <p>at 
System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, 
Object[] parameters) at 
System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Me ssage message, Object[] parameters) at 
    System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message  message, Object[] parameters) at 
System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp;  rpc) at 
System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) at 
System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) at 
System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p> </div> </body></html> 

任何建議或幫助,請?

回答

2

我都好笑解決了這個問題:我不得不BodyStyle = WebMessageBodyStyle.WrappedRequest添加到我的服務方法,以避免上述錯誤

1)。我不明白爲什麼,因爲它完全適用於沒有BodyStyle參數的jQuery Ajax調用。如果有人能解釋它,我將不勝感激?我使用:String s =「{\」id \「:\」1 \「,\」name \「:\」John \「,\」user \「:\」New Yourk \「 ,\「email \」:\「mypass \」,\「密碼\」:\「myemail \」}「;作爲測試字符串。我更改了參數「城市」的名稱給用戶。我將它發送給我的服務,並作爲響應我得到了「New Yourk」,只有一個參數的名稱作爲我的WS方法參數。

這意味着我需要發送一個名稱爲「用戶」和值的參數。例如:

JSONObject userValue = new JSONObject(); 
JSONObject user = new JSONObject(); 

userValue .put("id", "15"); 
userValue .put("name", "John"); 
userValue .put("city", "France"); 
userValue .put("email", "myemail"); 
userValue .put("password", "mypass"); 

user.put("user", userValue.toString()); 

現在我的請求已完成,我的服務器端可以處理我的用戶參數。

注意:將「userValue」添加爲字符串(user.put(「user」,userValue.toString()))非常重要。如果我們將它添加爲Json(user.put(「user」,userValue)),它將不起作用。

0

不知道它是否與這個問題有關,但是id應該是一個字符串?

我猜應該是這個:

user.put( 「ID」,15);

+0

對不起,我剛剛編輯了我的最後一句話,我沒有收到錯誤,這是我從服務器的迴應。我試過你的建議,沒有什麼改變。 – Milos 2013-04-05 12:41:52

+0

我在服務器端的參數是一個字符串(JSON),我應該解析,沒有任何其他類型的字符串除外。 – Milos 2013-04-05 12:48:33