2011-09-30 67 views
2

我们有一个内置于VB6的EPOS系统。客户使用Microsoft Dynamics AX作为CRM系统。第三方为我们的客户创建了AX实现,他们已经公开了我们需要使用的一组WCF Web服务来同步EPOS和AX CRM之间的数据。了解VB6会遇到调用WCF服务的问题,我创建了以下组件来处理EPOS和AX CRM之间的通信。VB6软件使用WCF Web服务。 App.config中的端点。错误VB6没有App.config

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服务的端点?这里

回答

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端点通信

+0

感谢您的支持!我会研究你的建议。不过要说,我认为我的观点重新打破OOP的规则,尽管如此。我想不出为什么在这样的情况下,你的初始调用者应该知道什么是组件中的几个步骤。也许这是因为我不知道WCF。更好地学习它快! – psiberman

+0

对,我认为在大多数情况下,初始调用者知道有关如何调用WCF服务的详细信息是可以的。有关地址,合同,绑定,端点等的配置细节实际上只是描述如何到达服务的信息部分,而不是真正关于服务的作用或它的作用...... – fdfrye

+0

您也可以创建一个' MyVB6.exe.config'文件(其中_MyVB6.exe_是使用WCF服务的VB6可执行文件),以便找到WCF服务配置信息。我以前成功完成了这个任务。此外,为了调试,您还可以实际创建一个'VB6.exe.config'文件,因为通过VB6.exe可执行文件进行调试。 HTH。 – fourpastmidnight