获取 XML 正文 - 调用 soap 网络服务时出现反序列化错误
Getting XML body - Deserialization errors on a call to a soap webservice
我的 soapwebservice 和我为它编写的新 C# 客户端有问题。服务器端采用现代标准 .NET Framework,而客户端只有 .NET 3.5。
每当我尝试 return 来自网络应用程序的字符串时,我都会收到错误消息:
"Fehler beim Deserialisieren des Textkörpers der Antwortnachricht für Vorgang \"MyMethod\"." with the einner exception: "Fehler im XML-Dokument (1,40286)."
Translated: A serialization error for the server response with an XML-Document error.
现在更让我困惑的是:
- 每当我而不是 returning 文本在 Webmethod 中抛出异常(示例:throw new ArgumentException)时,我都没有序列化错误。
- 当 java 客户端使用此 Web 服务时......我从该客户端那里完全没有收到任何错误。
客户代码:
public void MyMethod (bool _IsInDebugMode, MyWebMethodRef.MyProxySoapClient myclient)
{
BasicHttpSecurityMode secMode = (_IsInDebugMode) ? BasicHttpSecurityMode.None : BasicHttpSecurityMode.Transport;
BasicHttpBinding wsBinding = new BasicHttpBinding(secMode);
wsBinding.MaxReceivedMessageSize = 2147483647;
wsBinding.OpenTimeout = new TimeSpan(0, 0, 1);
wsBinding.CloseTimeout = new TimeSpan(0, 0, 1);
wsBinding.SendTimeout = new TimeSpan(0, 0, 30);
wsBinding.ReceiveTimeout = new TimeSpan(0, 0, 30);
string ret = myclient.myMethod(Convert.ToBase64String("Test"));
}
服务器代码:
public class MyProxy : System.Web.Services.WebService
{
public MyProxyHeader header;
[WebMethod]
[SoapHeader("header")]
public string myMethod(string mytext)
{
return Convert.ToBase64String("blahblubb");
}
}
现在我有点困惑,我的问题是:什么可能导致这个反序列化错误以及如何消除它?
终于找到原因了。尽管我对为什么会这样感到有点困惑,但在任何地方都没有任何关于它的消息。
本质上:只要我将客户端 .NET Framework 更新到 4.6,它就开始工作了。
看起来最新的 .NET Frameworks 构建 xml 字符串的方式与 3.5 .NET Framework 不同,这意味着它们向下兼容的程度不高!
我的 soapwebservice 和我为它编写的新 C# 客户端有问题。服务器端采用现代标准 .NET Framework,而客户端只有 .NET 3.5。
每当我尝试 return 来自网络应用程序的字符串时,我都会收到错误消息:
"Fehler beim Deserialisieren des Textkörpers der Antwortnachricht für Vorgang \"MyMethod\"." with the einner exception: "Fehler im XML-Dokument (1,40286)." Translated: A serialization error for the server response with an XML-Document error.
现在更让我困惑的是:
- 每当我而不是 returning 文本在 Webmethod 中抛出异常(示例:throw new ArgumentException)时,我都没有序列化错误。
- 当 java 客户端使用此 Web 服务时......我从该客户端那里完全没有收到任何错误。
客户代码:
public void MyMethod (bool _IsInDebugMode, MyWebMethodRef.MyProxySoapClient myclient)
{
BasicHttpSecurityMode secMode = (_IsInDebugMode) ? BasicHttpSecurityMode.None : BasicHttpSecurityMode.Transport;
BasicHttpBinding wsBinding = new BasicHttpBinding(secMode);
wsBinding.MaxReceivedMessageSize = 2147483647;
wsBinding.OpenTimeout = new TimeSpan(0, 0, 1);
wsBinding.CloseTimeout = new TimeSpan(0, 0, 1);
wsBinding.SendTimeout = new TimeSpan(0, 0, 30);
wsBinding.ReceiveTimeout = new TimeSpan(0, 0, 30);
string ret = myclient.myMethod(Convert.ToBase64String("Test"));
}
服务器代码:
public class MyProxy : System.Web.Services.WebService
{
public MyProxyHeader header;
[WebMethod]
[SoapHeader("header")]
public string myMethod(string mytext)
{
return Convert.ToBase64String("blahblubb");
}
}
现在我有点困惑,我的问题是:什么可能导致这个反序列化错误以及如何消除它?
终于找到原因了。尽管我对为什么会这样感到有点困惑,但在任何地方都没有任何关于它的消息。
本质上:只要我将客户端 .NET Framework 更新到 4.6,它就开始工作了。 看起来最新的 .NET Frameworks 构建 xml 字符串的方式与 3.5 .NET Framework 不同,这意味着它们向下兼容的程度不高!