Клиент WCF от VBA - PullRequest
       31

Клиент WCF от VBA

1 голос
/ 22 июня 2010

В .NET я разработал клиентскую библиотеку для моей службы WCF.

Я зарегистрировал сборку для COM-взаимодействия, чтобы я мог выполнять вызовы библиотеки из VBA.

Однако, поскольку исполняемый файл, использующий библиотеку, не встроен в настройку .NET, функции библиотеки не могут найти файл конфигурации, который определяет привязки службы ('app.config' в проекте Visual Studio)

Можно ли мне указать путь, где должен находиться файл конфигурации?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Правильный способ сделать это - не напрямую COM-активировать клиента WCF, а написать собственный шим, который раскрутит новый домен AppDomain, создаст там клиента и вернет IDispatch для клиента вызывающему COM. , После того как вы создадите свой собственный домен приложений, вы можете загрузить его конфигурационный файл из любого места, которое вам нравится, - это зависит от того, где вы укажете хостинг. С AppDomainManager, представленным в 2.0, вам даже не нужно писать неуправляемую оболочку - вы можете написать крошечную управляемую оболочку ComVisible на 100%, которая загружает ваш клиент WCF в свой собственный домен. Я использовал эту технику для ряда крупных проектов, которые должны были выполняться внутри Excel (та же проблема, что и у вас - плохая форма для переноса файла Excel.exe.config в общую папку), и он прекрасно работает.

1 голос
/ 22 июня 2010

Даже если у вас есть «родное» приложение 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;
...