2

我们有一个内置在 VB6 中的 EPOS 系统。客户使用 Microsoft Dynamics AX 作为 CRM 系统。第 3 方为我们的客户创建了 AX 实施,他们公开了一组 WCF Web 服务,我们需要使用这些服务在 EPOS 和 AX CRM 之间同步数据。知道 VB6 在调用 WCF 服务时会出现问题,我创建了以下组件来处理 EPOS 和 AX CRM 之间的通信。

VB6 EPOS 调用 -->
1) VB6 DLL 封装调用... -->
2) .NET(3.5) COM 可调用代理 DLL 封装调用... -->
3) .NET(3.5) Web 服务处理程序(实际调用 Web 服务的地方)-->
Microsoft Dynamics AX CRM。

我在 Vb.NET 中构建了一个测试控制台应用程序来模拟来自 VB6 的调用以帮助调试,以便测试控制台应用程序调用组件 2。

在执行此操作时,我遇到了以下异常:-

“(在 servicemodel 客户端配置部分中找不到引用合同'X'的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。 )"

我四处搜索,发现我必须将绑定和端点部分从组件 3 的 app.config 复制到我的测试控制台应用程序的新 app.config 中。我不了解 WCF,目前还没有时间真正学习它,以至于我明白为什么这会解决此错误。

不过现在,我正尝试从 VB6 EPOS 调用服务,并且再次弹出此错误。所以我在组件 2 中添加了一个 app.config,认为组件 2 是链中的第一个 .NET(3.5) 组件,这就是端点声明应该去的地方,但是没有。错误仍然弹出。

有没有人有任何想法?那里有任何编程英雄可以为一个傻瓜阐明这一点吗???请不要问我们为什么不重写 EPOS。我们会。只是还没有。那里有超过 300 万行意大利面条代码,而我只工作了 8 个月!!!

顺便说一句,这种情况是否违反了 OOP 的黄金法则之一,即封装。为什么我的 VB6 EPOS 需要知道组件 3 使用哪些端点来访问 WCF 服务???

4

1 回答 1

1

好问题在这里...

您的问题本质上来自使用 WCF 服务所需的所有配置数据。

在处理 .NET Windows 或 Web 应用程序时,WCF 服务的客户端和服务器端的配置数据都驻留在应用程序配置文件中。对于 Windows 应用程序,此文件将是 app.config,而对于 Web 应用程序,它将是 web.config。

在您的情况下,您希望将代理逻辑置于某种 COM 可见的 .dll 形式中。

这会让你有些悲痛……在 .NET 平台中,顶级主机应用程序(web 或 windows)的 .config 文件是读取所有配置数据的地方。即使您的应用程序利用了数十个 .NET 程序集(每个程序集都有自定义配置需求),运行时也会期望这些配置元素都驻留在最顶层的应用程序配置文件中。

要解决您的问题,您将需要与 VB6 确实有权访问的服务(想想 ASMX Web 服务)进行通信,并让该服务将您的调用转发到适当的 WCF 服务。

另一种选择是将配置变量直接从您的 VB6 应用程序传递到 Com-visible 程序集,以便您可以使用 WCF 的可扩展性模型通过传入的配置创建代理(覆盖从文件中读取配置数据的默认行为) .

我会说后一种情况可能会违反 SOA/OOP.. 取决于情况,VB6 应用程序可能/可能不适合了解/存储用于与 (最终)WCF 端点

于 2011-09-30T11:44:44.463 回答