数据合同序列化器可以用于任何第三方网络服务吗

Can the data contract serializer used for any third party webservice

我有一个大型的第三方网络服务; reference.cs 是 33 MB。使用 Visual Studio 2017,代理使用 XML Serializer,这会在创建通道时造成 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);
}

Any patterns I should look for which makes it for sure it will not work at all and I should start rewriting everything using HTTP Requests?

我已经集成了 Amadeus。不幸的是,发送 HTTP 请求也是我唯一的解决方案。我正在编写信封和 "inject" 数据并将其发送到网络服务,然后通过 XDocument 填充响应。

这个问题我遇到过很多次了。问题是由于您从 Amadeus 获得的 WSDL 的大小。服务数量越多,执行速度越慢。如果您为航空、酒店和汽车产品创建软件,您最终会获得大量服务。

在这方面你有两个选择;

  1. 要求 Amadeus 减少特定项目所需服务的 WSDL 大小。有点疼。
  2. 根据您的要求自行将 WSDL 编辑成更小的尺寸。例如要进行酒店搜索,只需为这几个服务自己创建一个 WSDL 包,然后为酒店预订部分自己创建另一个 WSDL 包。性能提升很大。

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