我正在尝试使用 SoapCore 在 asp.net 核心中托管 asmx 类型的 Web 服务。
我有一种网络方法如下。
[OperationContract]
XmlDocument testProperties();
具体实现如下。
public XmlDocument testProperties()
{
XmlDocument testProperties = new XmlDocument();
testProperties.LoadXml("<test>abc</test>");
return testProperties;
}
当我尝试访问此 Web 方法时,它失败并出现以下错误。
System.InvalidOperationException: There was an error generating the XML document.
---> System.InvalidOperationException: This element was named 'test' from namespace '' but should have been named 'TestPropertiesResult' from namespace ''.
注意:仅当方法的返回类型为 XmlDocument 时才会出现此问题。如果是字符串或其他简单数据类型,一切正常。
任何线索都会有所帮助。
编辑 1
我尝试使用 TestPropertiesResult 重命名测试,但这也没有解决任何问题。只有错误消息更改为
System.InvalidOperationException: There was an error generating the XML document.
---> System.InvalidOperationException: This element was named 'TestPropertiesResult' from namespace '' but should have been named 'TestPropertiesResult' from namespace ''.
编辑 2
在 SoapCore 中进一步分析后,我可以缩小根本原因。当 XmlSerializer 创建的 XmlDocument 发生序列化时,就会出现此问题
XmlSerializer ser = new XmlSerializer(typeof(XmlDocument), null, new Type[0], new XmlRootAttribute("dummynode"), "testnamespace");
我尝试将其更改为以下
XmlSerializer ser = new XmlSerializer(typeof(XmlDocument));
然后它可以工作,但缺少根元素。我无法改变它。我只能改变
XmlDocument
。