0

httpost を使用して WCF Web サービスからデータを取得しようとしています

webservice 関数に params がない場合、 List getAllMessages() のようなもの

私はjsonでリストを取得しています。ここでは問題ありません

トリッキーな部分は、関数が引数を取得する必要がある場合です。たとえば、この種の関数を呼び出そうとすると、メッセージ getMessage(string id) エラーコード 500 が表示されます。

作業コードは次のとおりです。

public String GetAllTitles()
 {

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "http://www.xxx.com/Service/VsService.svc/GetAllTitles");

    httppost.setHeader("Content-Type", "application/json; charset=utf-8");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);

        return readHttpResponse(response);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;

}

このコードは、引数なしの機能に最適です..私はこのコードを取り、次のように変更しました:

 public String SearchTitle(final String id)
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(
                   "http://www.xxx.com/Service/VsService.svc/SearchTitle");

        httppost.setHeader("Content-Type", "application/json; charset=utf-8");
        httppost.setHeader("Accept", "application/json; charset=utf-8");

        NameValuePair data = new BasicNameValuePair("id",id);
        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(data);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);

            return readHttpResponse(response);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;

    }

Web サービスの関数ヘッダーは次のとおりです。

 [OperationContract]
public TitleResult SearchTitle(string id)
{
    Stopwatch sw = LogHelper.StopwatchInit();
    try
    {
        TitleManager tm = new TitleManager();
        Title title = tm.TitleById(id);
        sw.StopAndLog("SearchTitle", "id: " + id);
        return new TitleResult() { Title = title };
    }
    catch (Exception ex)
    {
        sw.StopAndLogException("SearchTitle", ex, "id: " + id);
        return new TitleResult() { Message = ex.Message };
    }
}

誰でも私が欠けているものを見ることができますか?

ありがとう、私はこれについて頭を悩ませています。

4

1 に答える 1

0

リストはjsonではありません。試してください

String data = "{ id : \"" + id + "\" }";

Content-Length を に設定することを忘れないでくださいdata.length

于 2012-07-04T10:02:12.350 に答える