Совет поставщика DB2 .NET - PullRequest
       13

Совет поставщика DB2 .NET

3 голосов
/ 13 сентября 2011

У нас есть AS400, с которым нам нужно общаться с помощью наших приложений .NET. В настоящее время мы разрабатываем веб-приложения, работающие на Windows 2003/2008, и должны запустить установку клиента AS400, чтобы загрузить поставщика .NET на каждый из наших серверов, на которых выполняются веб-приложения, использующие этого поставщика.

Поставщик также загружается на наших клиентах для разработки через установку клиента AS400.

В настоящее время мы столкнулись с проблемой, когда при обновлении наших клиентских ПК до Windows 7 мы были вынуждены обновить программное обеспечение для клиентского доступа AS400. Это, конечно, потребовало от нас изменения DLL, используемой в наших проектах .NET, что потребует от нас загрузки новой версии поставщика .NET на серверы, если нам когда-либо потребуется внести изменения в наши приложения.

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

Я боролся с некоторыми возможными решениями и хотел бы знать, какое из них лучше? Или, если есть какие-нибудь лучшие идеи, чтобы обойти эту проблему?

  • Связанный сервер. У нас есть настройка связанного сервера через SQL 2005 с AS400, и он работает, но работает медленно и не работает с Entity Framework. Это кажется достаточно быстрым для запросов SELECT, но вставка выполняется очень медленно, и запросы требуют использования более сложного SQL с использованием OPENQUERY. Я попытался настроить представление для прохода к таблице DB2, но запросы либо выполняются медленнее, чем OPENQUERY, либо они иногда не работают.

  • Веб-сервис - я думал о том, чтобы обернуть все коммуникации DB2 через единый веб-сервис, когда при появлении обновлений нам придется беспокоиться только об одной точке отказа. Я беспокоюсь о скорости и обратной совместимости здесь.

  • Оболочка DLL - я также подумал о том, чтобы обернуть функциональность DB2 в мою собственную библиотеку классов и затем загрузить ее в GAC. Опять же, единственная точка отказа. Но я никогда не связывался с GAC, поэтому я не уверен, какие новые проблемы появятся, и у меня все еще будет проблема с обратной совместимостью.

  • Новый сервер VM. Другой вариант - настроить новый сервер приложений VM с новым поставщиком .NET, а затем переместить приложения по одному, после чего старый сервер можно будет удалить.

  • Замена DLL - я не пробовал этого, но я полагаю, что мог бы перекомпилировать каждое приложение на моем клиенте разработчика с новым поставщиком .NET, а затем заменить DLL, содержащую код доступа DB2 для каждого из приложений на сервере. (Я уже использую класс-оболочку для провайдера DB2, и он находится в его собственной DLL). Единственная возможная проблема заключается в том, что другие наши разработчики еще не используют новую версию клиента AS400, и у них есть приложение, развернутое на сервере. Нам нужно обновить их клиент AS400 как минимум.

Спасибо!

Ответы [ 2 ]

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

Моим внутренним желанием было бы пойти на «Веб-сервис». Используйте что-то вроде Ice с абсолютно потрясающей производительностью , чтобы изолировать вашу проблемную область. Упаковка ваших запросов бизнес-уровня должна быть простой задачей , и вам больше не придется беспокоиться о версиях продуктов IBM.

0 голосов
/ 19 сентября 2011

Мы решили использовать Linked Server, выяснив, как устранить проблемы с производительностью.Используя OPENQUERY, все выглядело быстро, кроме ВСТАВКИ.Использование метода EXECUTE также ускорило вставки.

Вот несколько примеров запросов, которые мы используем, если это может помочь кому-то еще ...

Выбрать

SELECT * FROM OPENQUERY (Linked_Server_Name, 'SELECT * FROM table WHERE field =' 'Data' '')

Вставить

EXECUTE ('INSERT INTO Server.Library.Table (field1, field2) VALUES (1, '' two '') ') AT [Linked_Server_Name];

Обновление

ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ(Linked_Server_Name, 'SELECT * FROM Library.Table WHERE field =' 'Data' '') SET field = 'New Data' WHERE field = 'Data'

Удалить

DELETE FROM OPENQUERY (Linked_Server_Name, 'SELECT * FROM Library.Table WHERE field =' 'Data' '') WHERE field = 'Data'

Примечание: Для выхода из одинарных кавычекв SQL используйте другую одинарную кавычку.Это не двойная кавычка.

...