c#webservice的问题,引用方法和类型

Bre*_*all 8 c# web-services

我遇到了一些问题,不确定这是不是问题,但是想要一些建议.

我在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改变方法的消息名称......"

方案?我将返回的类型重命名CheckUpdateResponseCheckUpdateResult,现在一切正常!

我希望这会对某人有所帮助!我在这上面浪费了很多时间......


Fre*_*els 11

显然,SOAP无法处理与其返回类型具有相同名称的方法.您可以通过阅读错误来修复它,并采取相应的措施:

public class VoucherResponse
{
    [WebMethod(MessageName="TheVoucher")]
    public Voucher Voucher{get; set;}
}
Run Code Online (Sandbox Code Playgroud)