2009-10-02 79 views
2

我打电话给别人的Web服务,他们提供了一个WSDL文件和一堆XSD文件。我使用本地WSDL文件在我的项目中创建了Web引用,并使用xsd.exe创建了一个类。 Web方法我打电话是调用Web服务的问题 - 使用XmlInclude或SoapInclude属性

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); 

该代码的最后一行我得到一个错误:

The type ObjectRQ was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.

我不知道什么可能会造成这个错误,我的搜索没有产生任何帮助。谁能帮我这个?

+0

在WSDL中,您正在调用的操作使用的消息的类型是什么?你能发布那部分WSDL吗? – 2009-10-03 17:16:30

回答

1

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

HTH。

+0

看起来这是正确的,不幸的是,对于我来说WSDL文件还有很多其他问题没有创建一个我刚放弃并直接HTTP的下降代理。谢谢,你的回答已经死了。 – Odd 2009-10-06 06:40:13

+0

我感谢您的评论。对不起,在这里你不能使用我的答案。 – 2009-10-06 10:18:35