在C#对Java web服务的请求中,头和请求之间的奇怪字符会阻止成功
我有一个C#方法,用于创建对基于Java的web服务的请求。我序列化我的类并将其发布到服务,它返回一个状态在C#对Java web服务的请求中,头和请求之间的奇怪字符会阻止成功,c#,java,web-services,jakarta-ee,xml-serialization,C#,Java,Web Services,Jakarta Ee,Xml Serialization,我有一个C#方法,用于创建对基于Java的web服务的请求。我序列化我的类并将其发布到服务,它返回一个状态400,表明它找不到命名的根元素。当使用fiddler时,我接受请求并在Composer中手动构造它,然后处理它并成功。使用十六进制查看器,我注意到从C发出的请求在头和请求数据之间有以下字符EF BB BF。我在Fiddler中执行的剪切粘贴请求没有执行,并且成功了。由于我不太熟悉Java服务的构造,在处理请求时,找到一种让Java忽略字符的方法会更容易吗?或者在.Net中构建另一个序列化程
400
,表明它找不到命名的根元素。当使用fiddler时,我接受请求并在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
...
}
那是UTF-8。它在那里是完全正确的
坦率地说,Java代码应该能够处理它,但修复它的最简单方法可能是指定您不希望在编码中使用它:
XmlTextWriter requestWriter = new XmlTextWriter(myRequestStream,
new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
(如果您没有使用C#4或5,只需省略
编码器houldemitutf8identifier:
部分;这是一个命名参数,可以更清楚地了解参数值的用途。)谢谢!像冠军一样工作。