调用Web服务的问题 - 使用XmlInclude或SoapInclude属性

时间:2009-10-02 07:26:23

标签: c# web-services soap

我正在调用其他人的Web服务,他们提供了一个WSDL文件和一堆XSD文件。我使用本地WSDL文件在项目中创建了Web引用,并使用xsd.exe创建了一个类。我正在调用的网络方法是

object MyService.MyMethod(object myObj)

所以我创建了一个新的服务实例和一个由xsd创建的对象的新实例。 Web服务文档告诉我myObj是ObjectRQ类型(从xsd创建)。

我的代码是这样的:

MyService service = new MyService();

ObjectRQ request = new ObjectRQ();

// Set the values of request.

object result = service.MyMethod(request);

在该代码的最后一行,我收到一个错误:

  

不期望ObjectRQ类型。使用XmlInclude或SoapInclude属性指定静态未知的类型。

我不知道是什么导致了这个错误,我的搜索没有产生任何帮助。任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

因为代理中的参数类型是object,组成消息的XmlSerializer不知道ObjectRQ类型。从那个意义上来说,这是意外的所以基本上你要做的就是让XmlSerializer以某种方式知道这种类型。 一种方法是XmlInclude属性。另一种方法是将类型添加到代理类操作已知类型。在数据协定中,您可以使用KnownType属性执行此操作,但由于您只能控制客户端,因此您必须自己在代码中执行此操作。 你可以找到一篇关于它的博客文章here

HTH。