12

我们需要使用ACORD 标准来实现 WCF Web服务。

但是,我不知道从哪里开始,因为这个标准非常庞大且非常复杂。我眼前一片混乱。

我正在尝试使用 WSCF.Blue 从我拥有的多个 XSD 中提取类,但到目前为止,我得到的只是一堆废话:一个包含 50,000 多行代码的 .cs 文件,它一直冻结我的 VS2010。

有没有人已经走过死亡之谷(ACORD 标准)并成功了?我真的很感激一些帮助。

4

5 回答 5

5

我写了一个 ACORD 到 c# 类库的转换器,然后用于几个大型商业保险产品。它的特点是将所有 ACORD XML 映射为简洁、可扩展的 C# 类。所以我知道你从哪里来!

一旦你深入研究它,它并没有那么糟糕,但我认为,如果他们全职工作,平均编码员将不会“得到它”大约 3-4 个月(假设除了查询式消息之外的任何内容)。真正的问题出现在尝试从后端数据库和到/从另一个 ACORD WS 进行映射时。所有的运营商、供应商和代理机构都有自定义规则。

我最好的建议是找到有效的代码示例(如果你需要的话,我有很多),甚至可能是让你在测试环境中连接到 ACORD ws 的供应商或运营商。

于 2012-07-27T14:42:29.873 回答
4

听起来您正朝着正确的方向前进,但却迷失在森林中。
ACORD 标准非常庞大且有意如此,因为它为数百种不同的消息提供支持。就像您不需要下载所有 Wikipedia 来获取几篇文章一样,您也不需要 ACORD 标准中的所有类来支持几条消息的实现。如果您知道需要支持哪些消息,那么您可以生成一个完整 XSD 的子集,该子集将非常易于管理。

正如 Hugh 的回复中所提到的,对于任何一条消息,只使用了完整 XSD 的一小部分。你如何去做这将取决于你的项目的细节。如果您正在寻找有关如何生成完整 XSD 子集的想法,请尝试通过PCS@acord.org 联系ACORD 员工寻求帮助。他们应该能够为您提供一些入门帮助。

于 2012-06-27T20:44:54.223 回答
2

如果您希望使用 .NET 读/写 ACORD 文档,我刚刚在http://ivc.codeplex.com上的 CodePlex 上偶然发现了“用于 ACORD 标准的 IVC 软件工厂” 。

从有限的文档看来,这个库似乎可以将对象转换为 ACORD XML 文档,反之亦然。源代码带有不同的“提供者”,即不同的 ACORD 事务类型,如 103 或 121。

希望这可以帮助。

于 2014-05-14T14:57:13.843 回答
2

我曾使用 Accord PCS 暴露报告标准,是的,这是一场噩梦。我还使用过其他大型标准,例如 FPML 和 SportsML。

您需要从模式中准确确定需要哪些类型。你如何做到这一点取决于你,但 VS 模式查看器应该能够处理它。如果不尝试 XmlSpy 或者如果必须手动通过它。确保你有一个好的学士学位...

您可能会发现使用标准中可用类型的大约 1% 即可满足您的要求。

您可能会发现,您可以使用非常少的一组值来表达核心对象,因为大多数节点将是minOccurs=0or nillable

然后,您可以使用 xsd.exe 上的 /element 开关为您需要的类型生成代码。

正如一位评论者所说,这里没有容易吞下的药丸。具有讽刺意味的是,标准应该让每个人的生活更轻松。

于 2012-06-21T07:03:45.203 回答
1

我建议不要为整个标准创建模型。可以只传递 XML 而不是序列化到模型中,而是将其加载到 XDocument/XElement 中并使用 Linq 查询它并使用 Linq 将 DOM 更新为 Xml。因此,不是将 XML 加载到强类型模型,而只是加载 XML。没有模型,只有一个 XML 文档。

从那里,可以根据需要从 XML 中挑选数据。

使用这种方法,代码会很丑陋并且几乎没有上下文,因为 XElements 将被传递到任何地方,并且会有大量的 XPaths 魔术字符串来查询和定义元素,但它可以工作。此外,一切都是字符串,因此将有实用的转换方法来转换为数字、日期时间等。

从我的角度来看,我已经使用 XmlSerializer 将 Acord 的一部分建模成一个对象模型,但它有超过 500 个类。该模型不是通过 XSD 或其他工具制作的,而是手动制作并花费了一些时间。工具将产生无法使用的怪物类(如您所提到的)和/或完全崩溃。例如,我尝试将 XSD 加载到 Stylus Studio 中,但它崩溃了好几次。

因此,如果您时间紧迫,最好的选择是加载到 XDocument 中,而不是尝试绘制模型中的所有内容。我知道这很糟糕,但总的来说,雅阁基本上是一个巨大的数据热点。

于 2017-05-24T20:22:50.520 回答