2009-07-16 3 views
1

Веб-приложение VB 6.0/ASP (не .NET), которое работает в среде Windows Server 2003/IIS с сервером sql 2005. Существует компонент ac/C++ (exe/service), который работает на сервер.VB6.0 и Windows 2003 кластеризация

Клиент хотел бы запустить в среде с кластерами Windows. Проблемы возникают из-за использования API-интерфейса Windows API GetComputerName. Это вызывает фактическое имя сервера, а не кластерное имя «alias».

Компонент c/C++ был исправлен установкой свойства в windows для этого exe, который заставляет вызов getcomputername возвращать сетевое имя, которое в этом случае является именем кластера псевдонимов.

Часть VB/ASP также имеет вызовы getcomputername. Есть ли какая-то настройка, похожая на то, как вы можете определить c/C++ exe, где вы можете заставить getcomputername использовать сетевое имя?

Что мы видим, когда загружается экран входа в веб-страницу, где должна быть информация о версии/функции, есть сообщение об ошибке: метод ~ объекта ~ не найден. Если мы вручную изменим ключ regecomputername reg, чтобы быть псевдонимом clustername, эта ошибка исчезнет. Не могу использовать это как долговременное исправление, потому что некоторые процессы окон появляются и возвращают это значение ключа к правильному имени.

Есть ли у кого-нибудь предложения по запуску приложений vb в кластерном env? Я бы предпочел не менять код и был бы полушут, если бы приложение должно было быть написано для кластеризации.

Спасибо!

Обновление 7/31/2009

мне было интересно, если есть способ сказать IIS (или VB, назначенный на сайт), чтобы использовать имя узла сети вместо локального имени машины через Инструмент администрирования MS Cluster. Я думаю, это то, где мое разъединение происходит со всеми предложениями до сих пор. Опять же, я смог добавить приложение c/C++ в инструмент администратора кластера и настроить его для использования имени сетевого узла без изменения какого-либо кода. Есть ли способ сделать то же самое для VB/ASP, который работает в IIS. Нужно ли настраивать IIS для кластеризации?

+0

Возможно, вы можете попробовать сыграть с записями DNS или локальным файлом хоста. GetComputerName следующий вызов будет состоять в том, чтобы разрешить IP-адрес кластера ... Я не уверен, что это сработает, но стоит попробовать. –

ответ

1

Не могли бы вы добавить это как элемент конфигурации для кода vb и просто втянуть его?


Добавить новый файл в код имени "ConfigCore.inc" с этим содержанием:

Dim isClustered 
isClustered = false 

Этот файл не должен быть изменен вашими пользователями, потому что вы хотите быть уверены, что переменные, по крайней мере определены и инициализируется. Затем вы добавляете еще один новый файл в приложение с именем "ConfigSetup.inc", которое включает этот файл ConfigCore.inc. Здесь вы обеспечите комментируемые примеры для того, как настроить желаемое поведение:

''Uncomment the following line to enable this app to run in a clustered environment 
''isClustered = True 

Этот файл документирован как пользователь редактируемого, и включить его в другом месте, так что это в сфере, где когда-либо необходимость.

+0

не думаю, что это сработает. Мой основной вопрос заключается в том, что веб-приложение vb должно быть записано в кластере, или есть некоторые настройки в кластеризации IIS/Windows, которые позволят приложениям vb запускаться в кластерной среде. Я знаю, что вы можете сделать это с помощью исполняемых файлов и сервисов c/C++. – MattLear

+0

+1. @Matt: почему это не будет работать. – AnthonyWJones

+0

@ Энтони @ Джоэл - Я собираюсь умолять о невежестве здесь, потому что я, вероятно, не понимаю твоего предложения. Как создать элемент конфигурации для контейнера vb, который работает в IIS? – MattLear

1

Просмотреть детали для GetComputerNameEx().

Обратите внимание, что в соответствии с этой страницы на MSDN, если вы проходите в NameType параметра как ComputerNameDnsDomain, страница говорится, что "Если локальный компьютер является узлом в кластере, lpBuffer получает доменное имя DNS виртуального сервера кластера «

Похоже, что для создания обертки VB должно быть достаточно просто.

+0

Спасибо за предложение rangerchris. Я пытаюсь избежать изменения фактического кода в vb. Можете ли вы подробнее рассказать об обертке vb? – MattLear

+0

Вам необходимо импортировать функцию, как это: Private Declare Function myGetComputerNameEx Lib "kernel32" Alias ​​"GetComputerNameExA" (ByVal enumNameType As Long, ByVal stringNameBuffer As String, ByRef BufferSize As Long) As Boolean stringNameBuffer и BufferSize использовать как GetComputerName() , тип name может просто быть перечислением, которое отображает перечисление на странице http://msdn.microsoft.com/en-us/library/ms724224(VS.85).aspx. Вам нужно будет обратить внимание на раздел «Примечания» на странице GetcomputerNameEx, особенно в том, что касается поведения, «может быть затронуто, если локальный компьютер является узлом в кластере» –