Программное обеспечение VB6, использующее веб-сервисы WCF. Конечные точки в App.config. Err VB6 не имеет App.config - PullRequest
2 голосов
/ 30 сентября 2011

У нас есть система EPOS, встроенная в VB6. Клиент использует Microsoft Dynamics AX в качестве системы CRM. Сторонние разработчики создали реализацию AX для нашего клиента, и они представили набор веб-служб WCF, которые мы должны использовать для синхронизации данных между EPOS и AX CRM. Зная, что у VB6 будут проблемы с вызовом служб WCF, я создал следующие компоненты для обработки связи между EPOS и AX CRM.

VB6 EPOS, который вызывает ->
1) Оболочка VB6 DLL, которая вызывает ... ->
2) .NET (3.5) Оболочка DLL Callable Proxy COM, которая вызывает ... ->
3) .NET (3.5) Обработчик веб-сервисов (где фактически вызываются веб-сервисы) ->
Microsoft Dynamics AX CRM.

Я создал тестовое консольное приложение в Vb.NET для имитации вызовов из VB6, чтобы помочь с отладкой, чтобы тестовое консольное приложение вызывало компонент 2.

При этом я получал следующее исключение: -

"(не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт 'X' в разделе конфигурации клиента servicemodel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или потому что элемент конечной точки, соответствующий этому контракту, не найден в клиентский элемент.) "

Я погуглил и обнаружил, что мне нужно скопировать раздел привязок и конечных точек из app.config компонента 3 в новый app.config для моего приложения Test Console. Я не знаю WCF, и сейчас у меня нет времени, чтобы действительно изучить его до такой степени, что я понимаю, почему это исправило эту ошибку.

Теперь я пытаюсь вызвать службы из EPOS VB6, и эта ошибка снова появляется. Поэтому я добавил app.config к Компоненту 2, думая, что, поскольку Компонент 2 является первым компонентом .NET (3.5) в цепочке, именно туда должно идти объявление конечной точки, но нет. Ошибка все еще появляется.

У кого-нибудь есть идеи? Любые герои программирования, которые могут пролить свет на это для простого человека, пожалуйста ??? Пожалуйста, не спрашивайте, почему мы не переписываем EPOS. Мы будем. просто еще нет. Там более 3 миллионов строк кода для спагетти, и я работаю над ним только 8 месяцев !!!

Кроме того, не нарушает ли этот сценарий одно из золотых правил ООП, то есть инкапсуляция. Зачем моему VB6 EPOS знать, какие конечные точки Компонент 3 использует для доступа к службе WCF ???

1 Ответ

1 голос
/ 30 сентября 2011

Отличный вопрос здесь ...

Ваша проблема в основном связана со всеми необходимыми данными конфигурации, необходимыми для работы со службой WCF.

При работе с .NET Windows или веб-приложениямиДанные конфигурации как на стороне клиента, так и на стороне служб WCF находятся в файле конфигурации приложения.Для приложения Windows этот файл будет app.config, тогда как для веб-приложения он будет являться web.config.

В вашем случае вы бы хотели поместить прокси-логику в некоторый вид COM-visible .dll.

Это может вызвать у вас некоторое горе ... на платформе .NET файл .config для хост-приложения верхнего уровня (веб или windows) - это место, где хранятся все данные конфигурации.читать.Даже если ваше приложение использует десятки сборок .NET (каждая со своими требованиями к конфигурации), среда выполнения будет ожидать, что все эти элементы конфигурации будут находиться в самом верхнем файле конфигурации приложения.

Чтобы решить вашу проблему,вам нужно будет связаться со службой, к которой у VB6 есть доступ (например, веб-службы ASMX), и эта служба переадресует ваш вызов соответствующей службе WCF.

Другой альтернативой является передача переменных конфигурации.непосредственно из приложения VB6 в сборку Com-visible, чтобы вы могли использовать модель расширяемости WCF для создания прокси (переопределяя поведение по умолчанию для чтения данных конфигурации из файла) с вашей переданной конфигурацией.

Iсказал бы, что последний сценарий может пойти обоими путями, поскольку он является нарушением SOA / OOP. В зависимости от ситуации, может быть / не может быть уместно, чтобы приложение VB6 знало / сохраняло детали конфигурации для связи с(возможная) конечная точка WCF

...