1

我是 Web 服务的新手,我正在开发一个 C# WCF 服务,它调用另一家公司的外部服务来获取一些客户端数据(例如:姓名、地址、电话等),这部分到目前为止工作正常.

外部服务基于一个标准的 XML Schema,其他公司很快就会从相同的 XML Schema 生成相同的服务,使用相同的名称方法并返回相同类型的 xml 文件。

我的第一个问题是,在我完成第一个实现之后,有什么方法可以“动态地”添加其他外部公司服务,拥有它们的 URL/端口/等信息,还是我必须手动将它们作为服务插入每次我需要添加一个新的时在我的内部服务项目中引用,然后编译并重新部署?

我的第二个问题与数据合同/成员有关,我的理解是即使他们返回相同的 XML 文件,他们的数据合同/成员也会不同,是这样吗?所以我必须制作一个特定的代码来从他们的数据合同中为每个新的外部公司读取我需要的信息??如果这是真的,我一直在考虑制作一个通用代码来读取原始 xml,这是最好的选择吗?

4

2 回答 2

1

虽然 C# 是一种编译语言,但它确实通过 MEF 支持插件架构。您可以使用它并为每个源添加一个小插件 .dll。

话虽如此,您很可能只需要一个配置列表,其中包含每个源的连接详细信息并动态连接到它们。这只有在他们使用完全相同的模式时才有效,这样他们所服务的对象将对所有源进行相同的序列化。当然,您必须使用该配置通过代码动态实例化代理。

我应该为您的第二个问题添加一些内容。只要您是定义合同的人,它们的实际对象是否不同都没有关系。您所关心的只是它们所服务的 xml,并且您可以使用您的表示进行连接。事实上,您可以将合同生成为 .wsdl 文档。然后,每个服务实施者都可以从中生成域对象。另一方面,如果您不是“拥有”合同的人,则某些消息来源可能会决定稍有不同,这会让您头疼。但希望这不是你的情况。

祝你好运!:)

于 2012-07-27T19:34:11.803 回答
0

我的第一个问题是,在我完成第一个实现之后,有什么方法可以“动态地”添加其他外部公司服务,包括他们的 URL/端口/等信息

不幸的是,您每次都会添加服务、编译和部署

我的第二个问题与数据合同/成员有关,我的理解是即使他们返回相同的 XML 文件,他们的数据合同/成员也会不同,是这样吗?

如果您将使用自动生成的每个服务将创建不同的合同。我会考虑创建自己的类并使用反射和扩展方法转换外部类

于 2012-07-27T19:39:13.517 回答