0

REST WCF サービスへのデータの POST に問題があります。json オブジェクト/配列をそれに送信する必要がありますが、私の POST メソッドは Stream を想定しており、それを分離して JSON を取得します (この部分を変更することはできません)。

私はこのコードでC#でこれを達成しました:

    public static string CallPostService(string url, string data)
    {
        url = Config.serviceAddress + url;
        string json = data;
        byte[] buffer = Encoding.UTF8.GetBytes(json);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Method = "POST";
        request.Credentials = new NetworkCredential("user", "pass");
        request.ContentType = "application/x-www-form-urlencoded";
        using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
        {
            sw.Write(json);
            Console.WriteLine(json);
        }
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            string res = sr.ReadToEnd();
            return res;
        }
    }

これを行うには、できればApache HttpClientを使用して、同等のJavaコードが必要です。私は http ライブラリを初めて使用するので、少し方向性を教えていただければ幸いです。

編集:

これは、私の WCF サービスのメソッド ヘッダーです。サービスが処理できるように、要求の本文はストリームである必要があります。

[WebInvoke(Method = "POST", UriTemplate = "person/delete", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Person DeletePerson(Stream streamdata) { //bla }
4

2 に答える 2

0

このコードスニペットを確認してください。私は本当にそれを試してみましたが、うまくいくはずです

public void postData() {
try {    
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
String auth = android.util.Base64.encodeToString(
(username + ":" + password).getBytes("UTF-8"), 
android.util.Base64.NO_WRAP
 );
 httppost.addHeader("Authorization", "Basic "+ auth);

    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("id", "12345"));
    nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);

} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
} catch (IOException e) {
    // TODO Auto-generated catch block
}
} 
于 2012-04-20T15:08:41.117 に答える
0
      String MyData;// Data need to post to server JSON/XML
      String reply;  
      try {

        URLConnection connection = url.openConnection(); 
        HttpURLConnection httppost = (HttpURLConnection) connection;
        httppost.setDoInput(true); 
        httppost.setDoOutput(true); 
        httppost.setRequestMethod("POST"); 
        httppost.setRequestProperty("User-Agent", "UA Here"); 
        httppost.setRequestProperty("Accept_Language", "en-US"); 
        httppost.setRequestProperty("Content-Type", "content type here"); 
        DataOutputStream dos = new DataOutputStream(httppost.getOutputStream()); 
        dos.write(MyData.getBytes()); // bytes[] b of post data 

        InputStream in = httppost.getInputStream(); 
        StringBuffer sb = new StringBuffer(); 
        try { 
            int chr; 
            while ((chr = in.read()) != -1) { 
                sb.append((char) chr); 
            } 
            reply = sb.toString(); 
        } finally { 
            in.close(); 
        } 

        Log.v("POST RESPONSE",reply);

    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
于 2012-04-20T15:19:27.320 に答える