我有一个遗留的VB6应用,需要调用.Net .dll来调用WCF Web服务。
起初,我收到了这条恼人的消息:
找不到名为“DocumentMetadataPortSOAP12”的端点元素 并在ServiceModel客户端中签订“CODSRef.DocumentMetadataType” 配置部分。这可能是因为没有配置文件 找到您的应用程序,或者因为没有端点元素匹配 这个名字可以在客户端元素中找到。
我按照这个链接 - Using app.config with Interop Controls - 它帮助我让我的VB6测试exe工作:
1)从网络测试客户端
复制app.config 2)将其重命名为MyVb6Test.exe.config
(与VB6 exe同名)。
到目前为止,非常好。
当前问题:
实际的客户端是VB6.exe,它调用VB6 .dll,它调用.Net / COM-aware .dll:
MyLegacyVb6App.exe
+-> MyNewVB6plugin.dll
+-> MyNewdotNet.dll
+-> WCF
即使我创建了MyLegacyVb6App.exe.config
- 完全像工作VB6测试 - 我仍然得到“找不到名称为'DocumentMetadataPortSOAP12'的端点元素......”
这是“MyNewDotNet.dll”中的.Net代码:
DocNotificationRequesttype wsRequest = new DocNotificationRequesttype();
DocumentMetadataTypeClient wsClient = new DocumentMetadataTypeClient("DocumentMetadataPortSOAP12", m_wsUrl);
DocNotificationResponsetype wsResponse = wsClient.DocNotification(wsRequest);
问:我有什么理由需要“app.config”吗?有什么方法可以直接在我的C#代码中“硬编码”它需要的东西吗?
问:我的方案有哪些其他选择:VB6 exe -> VB6 .dll -> .Net/Interop .dll => WCF
???
非常感谢你!
答案 0 :(得分:1)
毕竟我能够通过使用App.config来解决问题。
问题:
因为我的.Net .dll是从一个VB6 / COM调用的.dll调用来自VB6 .exe(gosh知道中间有多少VB6 / COM组件)... .Net正好在寻找 UNEXPECTED 中的app.config - NOT 与VB6 .exe本身在同一目录中(?!?)
解决方案:
我使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile tp获取.Net正在寻找app.config的实际位置:
LogMsg(">>AppConfigFile=" + AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);