我遇到了一些问题,不确定是否有问题,但想要一些建议。
我在vs2010中开发了一个c#webservice,当我调试服务时,我在浏览器中收到此错误
XML元素' VoucherResponse'来自命名空间' http://test.org/'引用方法和类型。使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:XML元素' VoucherResponse'来自命名空间' test.org'引用方法和类型。使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
现在在实际课程中查看我的代码" VoucherResponse"我有,
public class VoucherResponse : AResponse
{
public Voucher Voucher { get; set; }
}
Voucher对象看起来像这样
public class Voucher
{
public string PIN { get; set; }
public string Serial { get; set; }
public string Batch { get; set; }
}
现在在我的一个Web方法中,我返回了VoucherResponse,我假设在反映并检查时会发生此错误。
之前有没有人遇到类似的问题,或者有人可以给我一些建议吗?
由于
答案 0 :(得分:37)
我发现另一个案例会引发错误!这是我的代码:
[WebMethod]
public CheckUpdateResponse CheckUpdate()
{
...
}
好的,让我解释一下:CheckUpdateResponse
是我在代码中定义的结构,CheckUpdate()
是一种方法。因此,在WSDL .NET中,自动为方法名Response
添加CheckUpdate
后缀。
Etvoilà:它找到一个重复的元素并给出错误“使用WebMethodAttribute改变方法的消息名称......”
<强>解决方案强>?我将返回的类型从CheckUpdateResponse
重命名为CheckUpdateResult
,现在一切正常!
我希望这会对某人有所帮助!我在这上面浪费了很多时间......
答案 1 :(得分:10)
显然,SOAP无法处理与其返回类型具有相同名称的方法。 你可以通过阅读错误来修复它,并采取相应的行动:
public class VoucherResponse
{
[WebMethod(MessageName="TheVoucher")]
public Voucher Voucher{get; set;}
}
答案 2 :(得分:0)
我有同样的问题,但就我而言;我开发的应用程序是Web服务客户端,因此我无法控制更改WSDL \ Schema。
问题是我有一个带有17个操作的Web服务,所有这些操作都返回相同的复杂类型,由于返回类型的反序列化,我得到了提到的错误,因为.Net正在为每个输出包装返回类型,并且序列化器抛出错误:
The XML element 'XYZ' from namespace 'ABC' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute.
<强>解决方案:强> 我打开了Reference.cs文件,删除了所有wappered返回类型生成的类,并且只保留了一个,然后将其类名更改为泛型,与操作无关,它对我有用。