C# 调用web服务时出现问题-使用XmlInclude或SoapInclude属性
我正在调用其他人的web服务,他们提供了一个WSDL文件和一堆XSD文件。我已经使用本地WSDL文件在项目中创建了web引用,并使用xsd.exe创建了一个类。我调用的web方法是C# 调用web服务时出现问题-使用XmlInclude或SoapInclude属性,c#,web-services,soap,C#,Web Services,Soap,我正在调用其他人的web服务,他们提供了一个WSDL文件和一堆XSD文件。我已经使用本地WSDL文件在项目中创建了web引用,并使用xsd.exe创建了一个类。我调用的web方法是 object MyService.MyMethod(object myObj) 因此,我创建了一个新的服务实例和一个由xsd创建的对象实例。web服务文档告诉我myObj属于ObjectRQ类型(从xsd创建) 我的代码如下: MyService service = new MyService(); Object
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属性指定静态未知的类型
我不知道是什么导致了这个错误,我的搜索也没有得到任何有用的结果。有人能帮我吗?因为代理中的参数类型是object,即编写消息的XmlSerializer不知道ObjectRQ类型。从这个意义上说,这是出乎意料的。因此,基本上,您需要做的是让XmlSerializer知道,以这种或那种方式,期望使用这种类型。 一种方法是XmlInclude属性。另一种方法是将该类型添加到代理类操作中。在数据契约中,您可以使用KnownType属性执行此操作,但由于您只能控制客户端,因此您必须自己在代码中执行此操作。 你可以找到一篇关于它的博客文章
HTH.在WSDL中,您正在调用的操作所使用的消息的类型是什么?您可以发布WSDL的这一部分吗?看起来这是正确的,不幸的是,对于我来说,WSDL文件没有创建下降代理还有很多其他问题,我刚刚放弃并直接使用HTTP。不过,你的回答完全正确,谢谢。我感谢你的评论。很抱歉,您无法使用我的答案。