Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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服务_C#_Wcf_Datacontractserializer - Fatal编程技术网

C# 数据协定序列化程序能否用于任何第三方Web服务

C# 数据协定序列化程序能否用于任何第三方Web服务,c#,wcf,datacontractserializer,C#,Wcf,Datacontractserializer,我有一个大型的第三方Web服务;reference.cs是33兆字节。使用Visual Studio 2017,代理使用XML序列化程序,这会在创建频道时导致5秒延迟。我在Microsoft打开了一个案例,他们向我展示了部分如何修改reference.cs以使用Datacontract序列化程序。在同一台机器上,通道在20毫秒内创建,这将完全符合我的需要 不幸的是,这些消息会出现微小的差异,Microsoft支持部门也无能为力 有已知的限制吗?我应该寻找哪些模式来确保它根本不起作用,并且我应该开

我有一个大型的第三方Web服务;reference.cs是33兆字节。使用Visual Studio 2017,代理使用XML序列化程序,这会在创建频道时导致5秒延迟。我在Microsoft打开了一个案例,他们向我展示了部分如何修改reference.cs以使用Datacontract序列化程序。在同一台机器上,通道在20毫秒内创建,这将完全符合我的需要

不幸的是,这些消息会出现微小的差异,Microsoft支持部门也无能为力

有已知的限制吗?我应该寻找哪些模式来确保它根本不起作用,并且我应该开始使用HTTP请求重写所有内容

导致整体延迟的实际方法:

public XmlMembersMapping ImportMembersMapping(string elementName, string ns,
  XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors,
  bool validate, XmlMappingAccess access) {
  ElementAccessor element = new ElementAccessor();
  element.IsSoap = true;
  element.Name = elementName == null || elementName.Length == 0 ? elementName : 
    XmlConvert.EncodeLocalName(elementName);
}
我应该寻找哪些模式来确保它根本不起作用,并且我应该开始使用HTTP请求重写所有内容


我已经完成了Amadeus集成。不幸的是,发送HTTP请求也是我唯一的解决方案。我正在编写信封,“注入”数据并将其发送到webservice,然后通过XDocument填写回复。

我已经多次遇到这个问题。问题在于您从Amadeus获得的WSDL的大小。服务的数量越多,它执行的速度就越慢。如果你为航空、酒店和汽车产品开发软件,你最终会得到大量的服务

在这方面你有两个选择

  • 请Amadeus减少特定项目所需服务的WSDL的大小。有点痛
  • 根据您的需求将WSDL编辑为较小的大小。例如,要进行酒店搜索,只需为这几项服务自己创建一个WSDL包,然后为酒店预订部分自己创建另一个WSDL包。性能增益是巨大的

  • 我选择选项2,因为让Amadeus实施选项1是痛苦的,不值得这么麻烦。

    问题:为什么WCF客户端不能使用高效的–DataContractSerializer?答:简言之,WSDL和XSD之间的一些映射不正确,默认情况下,svcutil.exe最终将拒绝并回退到XML序列化程序。这应该由提供这些文件的合作伙伴团队进行审查和修复。这是MS支持团队今天的新反馈。我发现这可以解释为什么在创建代理而不是默认datacontract序列化程序时选择XMLSerializer。问题可能出在第三方。“当使用Svcutil.exe或Visual Studio中的“添加服务引用”功能为第三方服务生成客户端代码或访问第三方架构时,会自动为您选择适当的序列化程序。如果架构与DataContractSerializer不兼容,则会选择XmlSerializer”“Ernesto:没错。”。Microsoft支持人员试图为我修复WSDL,但这似乎很困难。到目前为止,我学到的是,WCF应该是100%WS-*兼容的。也许有一个不是微软的ws*lint工具可以用来向我的Web服务提供商证明(顺便说一句,是Amadeus.com)。最有可能来自W3C?