2

Java ベースの Web サービスへのリクエストを作成する C# メソッドがあります。クラスをシリアライズしてサービスに投稿すると400、名前付きのルート要素が見つからないことを示すステータスが返されます。フィドラーを使用する場合、リクエストを受け取り、コンポーザーで手動で構築して処理すると成功します。Hex Viewer を使用すると、C# から発行されたリクエストのヘッダーとリクエスト データの間に次の文字があることに気付きましたEF BB BF. Fiddler で実行したカット アンド ペーストの要求は実行されず、成功します。私はJavaサービスの構築に精通していないので、リクエストを処理するときにJavaに文字を無視するように指示する方法を見つける方が簡単でしょうか.Netでさらに別のシリアライザーを構築する方が簡単でしょうか? 可能な限り迅速な解決策に到達するためだけに、ここで宗教戦争を開始することは私の意図ではありません.

リクエストとレスポンスの間の 3 つの醜い文字

シリアル化するコードは次のようになります。

//seralize the Request
 XmlSerializer msgSerializer = new XmlSerializer(Msg.GetType());
  try
  {
      request = (HttpWebRequest)WebRequest.Create(_endpoint);
      request.Method = "POST";
      request.KeepAlive = true;
      request.SendChunked = true;
      using (Stream myRequestStream = request.GetRequestStream())
      {
            XmlTextWriter requestWriter = new XmlTextWriter(myRequestStream, Encoding.UTF8);
            msgSerializer.Serialize(requestWriter, Msg);
            myRequestStream.Close();
      }
      response = request.GetResponse();
  }
  catch (WebException webE)
  {
        //Yada Yada Yada
        ...
  }
4

1 に答える 1

2

それは UTF-8バイト オーダー マークです。それがそこにあることは完全に有効です。

率直に言って、Java コードこれに対処する必要がありますが、これを修正する最も簡単な方法は、エンコーディングでそれを望まないことを指定することです。

XmlTextWriter requestWriter = new XmlTextWriter(myRequestStream,
    new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));

(C# 4 または 5 を使用していない場合は、そのencoderShouldEmitUTF8Identifier:部分を省略してください。これは名前付き引数であるため、引数の値が何のためにあるのかが明確になります。)

于 2013-05-08T20:00:57.333 に答える