Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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# 在WCF中从SOAP服务反序列化项_C#_.net_Wcf_Soap - Fatal编程技术网

C# 在WCF中从SOAP服务反序列化项

C# 在WCF中从SOAP服务反序列化项,c#,.net,wcf,soap,C#,.net,Wcf,Soap,我已经花了好几个小时在这上面了,我一辈子都不知道如何在WCF中反序列化这个SOAP: Widget1 很酷的事情 3. asdf fdsa 以下是我的服务客户端实现: [ServiceContract命名空间=http://www.MyApp.com/API ] 公共接口 { [OperationContract Action=getItem] GetItemResponse GetItem GetItemByNameRequest请求; } [MessageContract IsWrapped

我已经花了好几个小时在这上面了,我一辈子都不知道如何在WCF中反序列化这个SOAP:

Widget1 很酷的事情 3. asdf fdsa 以下是我的服务客户端实现:

[ServiceContract命名空间=http://www.MyApp.com/API ] 公共接口 { [OperationContract Action=getItem] GetItemResponse GetItem GetItemByNameRequest请求; } [MessageContract IsWrapped=true,WrapperName=getItem] 公共类GetItemByNameRequest { [MessageBodyMember名称=名称,命名空间=] 公共字符串名称{get;set;} } [MessageContract IsWrapped=true,WrapperName=getItemResponse,WrapperNamespace=http://www.MyApp.com/API ] 公共类GetItemResponse { [MessageBodyMember名称=返回,命名空间=] 公共项[]返回{get;set;} } [数据合同名称=项目] 公共类项目 { [数据成员] 公共字符串名称{get;set;} [数据成员] 公共字符串说明{get;set;} [数据成员] 公共字符串乘积{get;set;} } 我想忽略tag1和tag2,所以我没有将它们包括在我的datacontract中。为了简洁起见,我删除了SOAP响应中大约30个额外的标记,我不关心它们。 调用GetItem方法时,对于上面给出的响应,GetItemResponse.Return的值为null。 我错过了什么

我很乐意将项目的元素反序列化,但如果我也能将属性导出,我会更高兴

我尝试将GetItemResponse类的Return属性更改为XmlNode[],并从中得到了一个单节点数组,因此我感觉自己非常接近

自动生成的服务引用是不可能的,因为该服务非常庞大,会导致程序集的大小超过10MB,并支付>1分钟的启动罚款。它还将结果作为对象[]而不是项[]公开,这并不是非常有用,因为我无法将对象[]强制转换为项[]。实际的底层类型似乎是XmlNode[]

以下是响应对象的XSD:


为什么要尝试手动执行此操作,向客户端添加服务引用不起作用?我只希望公开一小部分函数,因为有数百个,并且使用自动生成的服务引用会导致应用程序启动延迟。@dodexahedron:请先使用服务引用进行尝试。在手动尝试之前,看看是否可以让它工作。服务引用不会导致任何启动延迟,除非您使用的是ASP.NET网站项目。因为这些是在运行时编译的,所以可能会有延迟。还有一个不使用它们的原因。@JohnSaunders,服务引用工作得很好,只是因为它的大小,生成的服务引用导致程序集大小增加超过10MB,并且应用程序启动需要很长时间,即使我有visual studio预编译XmlSerializer。我正在手动执行此操作,这样我就可以拥有一个干净、精简、可移植的dll,以放入任何消费应用程序中。请查看更新的问题以及我对以前有关服务参考代码的查询的答复。它返回的类型比我自己的代码通过部分行修改得到的类型更远离我想要的类型。作为返回类型,服务引用能给我提供的最好的返回类型是object[],而且似乎该XML不可能反序列化为Item[]或Item。要使用服务参考代码,仍然需要大量手动编码才能将XmlNode[]转换为Item,因此无论如何都需要时间。