2017-02-20 1 views
0

Я борюсь с вызовом службы WCF внутри сборной библиотеки с настраиваемым конфигурационным файлом. Служба WCF работает в среде Citrix Xen Server, что, вероятно, является причиной проблемы.с помощью службы wcf с настраиваемым путем конфигурации

Я установил консольное приложение, которое ссылается на библиотеку сборки и вызывает общедоступный метод внутри этой библиотеки, который подключается к конечной точке службы WCF и отображает данные, полученные из вызова функции WCF внутри Datagrid Win Forms.

Сейчас я устанавливаю путь к конфигурации для текущего домена приложения внутри конструктора Win Forms класса «E2ADokumente», который отображается в библиотеке сборки:

var assembly = Assembly.GetAssembly(typeof(E2ADokumente)); 
var assemblyFilePath = assembly.Location; 
var assemblyDirectory = Path.GetDirectoryName(assemblyFilePath); 
var dllName = assembly.GetName().Name + ".dll.config"; 
string configPath = Path.Combine(assemblyDirectory, dllName); 
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath); 

прокси WCF строится как так :

WSTrustChannelFactory channelFactory = new WSTrustChannelFactory("STSEndpunkt") 

"STSEndpunkt" - это имя конечной точки и определено в файле конфигурации.

Все работает, если я запускаю код локально, но файл конфигурации не будет найден, если я запустил одно и то же приложение в среде служб терминалов. В сообщениях об ошибках указано, что «STSEndpunkt» не найден.

Он работает в среде служб терминалов, хотя, если я запустил сборку библиотеки в новом домене приложения. Но иметь отдельный слой и метод вызова через отражение - это слишком много накладных расходов, поэтому я ищу более простое решение.

Как установить путь для файла конфигурации с данными конфигурации WCF в библиотеке сборки, которая работает в службах терминалов?

Создание настройки канала WCF в коде не является вариантом.

ответ

0

Я нашел решение после множества google-fu.

Настройка пути конфигурации для библиотеки сборки работает, если она выполнена внутри статического конструктора класса.

static E2ADokumente() 
{ 
    var assembly = Assembly.GetAssembly(typeof(E2ADokumente)); 
    var assemblyFilePath = assembly.Location; 
    var assemblyDirectory = Path.GetDirectoryName(assemblyFilePath); 
    var dllName = assembly.GetName().Name + ".dll.config"; 
    string configPath = Path.Combine(assemblyDirectory, dllName); 
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath); 
} 

После этого конфигурационный файл для службы WCF был загружен сборкой.

Я не знаю, какие отличия от того, что приложение работает в Terminal Services, но, по крайней мере, это простое исправление.

Смежные вопросы