我遇到了一些问题,不确定这是不是问题,但是想要一些建议.
我在vs2010中开发了ac#webservice,当我调试服务时,我在浏览器中收到此错误
名称空间"http://test.org/"中的XML元素"VoucherResponse"引用了方法和类型.使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.InvalidOperationException:命名空间"test.org"中的XML元素"VoucherResponse"引用方法和类型.使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素.
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
现在看看我在实际课程"VoucherResponse"中的代码,我有,
public class VoucherResponse : AResponse
{
public Voucher Voucher { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而Voucher对象看起来像这样
public class Voucher
{
public string PIN { get; set; }
public string Serial { get; set; }
public string Batch { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在在我的一个Web方法中,我返回了VoucherResponse,我假设当它被反射并检查时会发生这个错误.
以前有没有人遇到类似的问题,或者有人可以给我一些建议吗?
谢谢
Ser*_*m's 39
我发现了另一个引发错误的案例!这是我的代码:
[WebMethod]
public CheckUpdateResponse CheckUpdate()
{
...
}
Run Code Online (Sandbox Code Playgroud)
好吧,让我解释一下:CheckUpdateResponse我在代码中定义的结构CheckUpdate()是一种方法.因此,在WSDL .NET中自动为Response方法名称添加后缀CheckUpdate.
Etvoilà:它找到一个重复的元素并给出错误"使用WebMethodAttribute改变方法的消息名称......"
方案?我将返回的类型重命名CheckUpdateResponse为CheckUpdateResult,现在一切正常!
我希望这会对某人有所帮助!我在这上面浪费了很多时间......
Fre*_*els 11
显然,SOAP无法处理与其返回类型具有相同名称的方法.您可以通过阅读错误来修复它,并采取相应的措施:
public class VoucherResponse
{
[WebMethod(MessageName="TheVoucher")]
public Voucher Voucher{get; set;}
}
Run Code Online (Sandbox Code Playgroud)