0

Windows Phone アプリケーションから Java-WS (およびプロバイダー実装) で実行される Web サービスに非常に基本的な XML 文字列を送信し、応答を取得しようとしています。文字列が (サーバー上の TCP モニターを介して) 作成され、正しいように見えますが、Web サービスはソース オブジェクトが null であるという例外をすぐに引き起こします。Java をクライアントとして使用すると、(TCP モニターにリストされた同じ要求文字列で) 応答を返すことができますが、私の実装は少し異なります。.NET での方法は次のとおりです。

 string req = "<?xml version='1.0' encoding='UTF-8'?><request><requestor>WP7.1</requestor></request>";
 string url = "http://mywebservice/endpoint1test";

 WebClient wc = new WebClient();
 wc.Headers["ContentType"] = "text/xml";            
 wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc_UploadStringCompleted);
 wc.UploadStringAsync(new Uri(url), "POST", req);

void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
    Debug.WriteLine("Web service says: " + e.Result);
}

サーバーは例外で null を返すため、結果は常に空の文字列になります。ヘッダーやエンコーディングなど、単純なものが欠けているように感じます。役に立つ場合は、動作するクライアントの Java バージョンを次に示します。

    String data = "<?xml version='1.0' encoding='UTF-8'?><request><requestor>WP7.1</requestor></request>";

    // Send data
    URL url = new URL(testUrl);
    java.net.URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type","text/xml");
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.close();

    // Get the response
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
        System.out.println(line);
    }
    rd.close();
4

1 に答える 1

1

次の行を変更する必要があります。

wc.Headers["Content-Type"] = "text/xml";   

ダッシュを逃したことに気付くはずです=)

于 2012-06-12T12:32:05.090 に答える