c#web服务问题,引用方法和类型

时间:2010-12-09 11:56:52

标签: c# web-services

我遇到了一些问题,不确定是否有问题,但想要一些建议。

我在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,我假设在反映并检查时会发生此错误。

之前有没有人遇到类似的问题,或者有人可以给我一些建议吗?

由于

3 个答案:

答案 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返回类型生成的类,并且只保留了一个,然后将其类名更改为泛型,与操作无关,它对我有用。