Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用web服务时出现问题-使用XmlInclude或SoapInclude属性_C#_Web Services_Soap - Fatal编程技术网

C# 调用web服务时出现问题-使用XmlInclude或SoapInclude属性

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

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

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。不过,你的回答完全正确,谢谢。我感谢你的评论。很抱歉,您无法使用我的答案。