我正在调用其他人的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属性指定静态未知的类型。
我不知道是什么导致了这个错误,我的搜索没有产生任何帮助。任何人都可以帮我这个吗?
答案 0 :(得分:1)
因为代理中的参数类型是object,组成消息的XmlSerializer不知道ObjectRQ类型。从那个意义上来说,这是意外的所以基本上你要做的就是让XmlSerializer以某种方式知道这种类型。 一种方法是XmlInclude属性。另一种方法是将类型添加到代理类操作已知类型。在数据协定中,您可以使用KnownType属性执行此操作,但由于您只能控制客户端,因此您必须自己在代码中执行此操作。 你可以找到一篇关于它的博客文章here。
HTH。