2010-06-22 81 views
1

在.NET中,我为我的WCF服务开发了一个客户端库。来自VBA的WCF客户端

我已经注册了COM互操作程序集,以便可以从VBA调用库。

然而,由于使用该库的可执行文件在.NET环境未建,库函数是无法找到定义服务绑定(在Visual Studio项目“的app.config”)

配置文件

有没有什么办法可以指定配置文件应该在哪里放置的路径?

感谢

回答

1

做到这一点,正确的方法是不要直接COM激活WCF客户端,而是写一个定制的垫片,将旋转了一个新的AppDomain,创建客户端,并将客户端的IDispatch返回给COM调用者。一旦你创建了自己的AppDomain,你可以从任何你喜欢的位置加载它的配置文件 - 这取决于你的主机垫片来告诉它在哪里。使用2.0中引入的AppDomainManager,您甚至不必编写非托管填充程序 - 您可以编写一个小型100%管理的ComVisible填充程序,将您的WCF客户端加载到其自己的域中。我已经将这种技术用于许多必须在Excel中运行的大型项目(您遇到过同样的问题 - 将Excel.exe.config放置到共享位置的错误形式),并且效果很好。

1

即使你有一个“原生”的Win32应用程序,你仍然可以摆正在同一目录中的应用程序称为MyApp.exe.config一个配置文件,以及.NET部分应该是能够找到和解释该配置文件。

您的VB应用程序不会知道任何关于该配置文件的信息,也不会对它做任何事情 - 但是您的.NET客户端库将查找并使用它。

我已经使用这种技术将C#代码组件集成到本机C++/Win32应用程序中 - 这对我来说就像是一种魅力。

它需要一个完全编译,本地EXE文件,这种方法的工作 - 不知道您的VBA项目提供的,虽然...


如果您不能使用此选项直播,实际上,只有其他选项是以编程方式定义和加载配置文件。你不能定义/指定配置文件的位置 - 但你可以在代码中加载一个特定的配置文件并使用它(几乎与默认配置文件相同)。

退房的ConfigurationManager.OpenMappedExeConfiguration方法:

// you need to define a ExeConfigurationFileMap that defines what file to use 
ExeConfigurationFileMap exeMap = new ExeConfigurationFileMap(); 
exeMap.ExeConfigFilename = @"C:\Application\Default.config"; 

// then, you need to load that file with the ConfigurationManager 
Configuration exeConfig = 
    ConfigurationManager.OpenMappedExeConfiguration(exeMap, ConfigurationUserLevel.None); 

// now you can access parts of that config 
string someValue = exeConfig.AppSettings.Settings["SomeValue"].Value; 
string connStr = exeConfig.ConnectionStrings.ConnectionStrings["Default"].ConnectionString; 
+0

这是行不通的。不幸的是,我认为生产级系统不应该放置它应该用自己的文件污染MS Office目录,所以我想找到一个解决方案,允许我选择配置文件的位置。 – mcoolbeth 2010-06-22 20:25:58