2

我有一个 C# 方法,可以创建对基于 Java 的 Web 服务的请求。我序列化我的类并将其发布到服务,它返回一个状态400,表明它找不到命名的根元素。使用提琴手时,我接受请求并在 Composer 中手动构造它并处理它,它成功了。使用十六进制查看器,我注意到从 C# 发出的请求在标头和请求数据之间具有以下字符EF BB BF. 我在 Fiddler 中执行的剪切和粘贴请求没有,它成功了。由于我不精通 Java 服务的构建,是否更容易找到一种方法来告诉 Java 在处理请求时忽略字符,或者在 .Net 中构建另一个序列化程序更容易?我无意在这里发动一场宗教战争,只是为了尽快找到解决办法。

请求和响应之间的三个丑字

序列化的代码如下所示:

//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 回答