数据是否可以将序列化程序用于任何第三方Web服务

时间:2017-06-19 18:11:14

标签: c# wcf datacontractserializer

我有一个庞大的第三方网络服务; reference.cs是33 MB。使用Visual Studio 2017,代理使用XML Serializer,在创建通道时会导致5秒的延迟。我在微软开了一个案例,他们向我展示了如何修改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);
}

2 个答案:

答案 0 :(得分:1)

  

我应该寻找的任何模式确保它根本不起作用我应该开始使用HTTP请求重写所有内容吗?

我做了Amadeus整合。不幸的是,发送HTTP请求对我来说也是唯一的解决方案。我正在编写信封并“注入”数据并将其发送到Web服务,然后通过XDocument填充响应。

答案 1 :(得分:1)

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

在这方面你有两个选择;

  1. 要求Amadeus减少特定项目所需服务的WSDL大小。有点痛苦。
  2. 根据您的要求自行编辑WSDL。例如,要进行酒店搜索,只需为这些服务创建一个WSDL包,然后自己为酒店预订部分创建另一个WSDL包。性能提升很大。
  3. 我选择2,因为让Amadeus实施选项1是痛苦的,不值得麻烦。