【问题标题】:VB6 software consuming WCF web services. Endpoints in App.config. Err VB6 has no App.configVB6 软件使用 WCF Web 服务。 App.config 中的端点。 Err VB6 没有 App.config
【发布时间】:2011-09-30 11:35:56
【问题描述】:

我们有一个内置在 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 服务???

【问题讨论】:

    标签: wcf .net-3.5 vb6 endpoints ax


    【解决方案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 端点

    【讨论】:

    • 谢谢!我会研究你的建议。不过不得不说,我认为我关于打破 OOP 规则的观点是站得住脚的。我想不出为什么在这样的场景中,您的初始调用者应该知道组件中包含的内容的任何信息。也许是因为我不知道 WCF。最好快点学!
    • 对,我认为在大多数情况下,初始调用者了解有关“如何”调用 WCF 服务的详细信息是“可以的”。围绕地址、合约、绑定、端点等的那些配置细节实际上只是描述如何访问服务的信息片段,而不是真正关于服务做什么或它如何做......
    • 您还可以创建一个MyVB6.exe.config 文件(其中 MyVB6.exe 是使用 WCF 服务的 VB6 可执行文件),这样,WCF 服务配置信息将是成立。我以前成功地做到了这一点。此外,对于调试,您还可以实际创建一个VB6.exe.config 文件,因为调试是通过 VB6.exe 可执行文件进行的。 HTH。
    猜你喜欢
    • 2013-08-17
    • 2015-10-10
    • 2014-12-11
    • 2013-12-08
    • 1970-01-01
    • 2012-04-02
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多