Лучшие практики при общении с AS400 (IBM i) из .NET - PullRequest
6 голосов
/ 14 ноября 2010

Мне нужна некоторая помощь в отношении того, что важно и передовой опыт при создании решения для отчетности на основе .NET поверх существующей системы на основе AS400.

  • Какая интеграция наиболее подходит технология (ODBC, OLE DB, ADO.NET) и это зависит от того, какая версия о AS400 мы говорим? Это всегда базы данных DB2 или делает это варьироваться до? Какие другие системы постоянства обычно используются?
  • Можно ли позвонить программы в мейнфрейме, который имеет логика в них или предпочтительнее копировать эту логику на уровне .NET а затем напрямую вызвать базу данных мэйнфрейма?
  • Полагаю, система отчетности должна быть подключена к сети и напрямую вызывать БД мэйнфрейма, или есть другие способы (например, экспорт файлов и т. Д.), Которые предпочтительнее?
  • Какие технические детали важно выяснить перед началом проекта (версия AS400 и т. Д.) Для устранения проблем.

По сути, я заинтересован (и буду голосовать) всей информацией и опытом проектов .NET / AS400. Я никогда не делал этого раньше, и мне нужно знать подводные камни перед началом проекта.

Ответы [ 4 ]

4 голосов
/ 15 ноября 2010

Хорошо. Я работал с AS / 400 и системами мэйнфреймов из .NET и подключался к ним несколько лет назад.Возможно, я не смогу ответить на ваши вопросы напрямую, но могу сообщить вам, что сработало для меня, и некоторые вещи, которые я делал в прошлом.

Общий термин для этого типа работы - EnterpriseИнтеграция приложений (EAI), чтобы вы могли начать с чтения этого.Насколько я знаю, в AS / 400 можно иметь больше, чем просто базы данных DB2.Было два способа работы с «зелеными» (или устаревшими) приложениями:

  1. Прямой доступ к источнику данных / хранилищам
  2. Создание сеанса, отправка нажатий клавиш, таких как F10, F4и т. д., которые унаследованное приложение использует для навигации по разным экранам и получения данных из фиксированных точек на унаследованном экране (это иногда называется очисткой экрана).

Чтобы частично ответить на ваш первый вопрос, чтобы получить прямой доступ к источникам данных, мы создали DSN (имя источника данных) с использованием драйверов ODBC, которые были доступны у 2 компаний в то время, Rumba (от Wall Data)и Attachmate (сделанный, я думаю, IBM).Для создания ODBC DSN вы обычно заходите в Инструменты администратора / Источники данных и добавляете системный DSN.Вам потребуется имя хоста (устаревшая система), имя пользователя для входа в систему и пароль.Затем мы использовали эти уведомления о доставке в приложениях .NET, чтобы создать соединение с устаревшими приложениями.Если у вас есть DSN, вы можете использовать что-то вроде SQL Server DTS / SSIS, чтобы получить данные из источника и сохранить их в каком-то месте, будь то база данных, файлы CSV, файлы Excel и т. Д. Также более вероятно, что возможно иметьинструмент создания отчетов (Crystal / SQL Server Reporting Services) обращается к источнику данных напрямую, используя DSN, чтобы вы могли получать отчеты напрямую из источника данных.Также вы могли бы, вероятно, создать соединения без DSN, много лет назад нам были нужны DSN.

Чтобы частично ответить на 2-й вопрос, можно позвонить и использовать логику в приложениях с зеленым экраном, если хотите.Зеленый экран обычно делится на определенное количество строк и столбцов, и мы использовали стандарт HLLAPI, который отправлял нажатия клавиш из системы Windows в позиции на устаревшем экране.Для этого мы использовали Rumba, который был доступен как элемент управления OCX, и я уверен, что Attachmate также доступен.Например, вы можете создать форму Winforms с текстовыми полями Идентификатор пользователя и пароль, затем создать сеанс для устаревшего приложения, и обычно первым экраном будет экран входа в систему.Затем, используя позиции полей имени пользователя и пароля на зеленом экране, отправьте идентификатор пользователя и пароль на эти позиции, а затем отправьте клавишу Enter или все, что было необходимо для входа в систему.Затем вы можете перейти к другому экрану, например к экрану поиска, отправить данные и нажатия клавиш для выполнения поиска, а затем получить полученные данные с зеленого экрана.Другой подход заключается в создании форм Win / Web, которые копируют приложение с зеленым экраном и напрямую получают данные из хранилищ данных.Преимущество этого состоит в том, что вам не нужно знать нажатия клавиш / навигацию в унаследованном приложении, которое может быть громоздким для большой системы с зеленым экраном.Там нет правильного или неправильного, это зависит от обстоятельств.Наша компания сделала смесь обоих.

Ваш третий вопрос зависит от типа отчетов, которые вы хотите.Если они должны быть в режиме реального времени, то вы можете подключиться непосредственно к хранилищу данных.Если они не должны быть в режиме реального времени, вы можете выполнять ночные передачи данных из устаревшей системы и сохранять их, например, в SQL Server, а затем запускать отчеты по данным SQL Server.

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

Наконец, есть некоторые сторонние компании, которые специализируются на передаче данных из источника в место назначения, одна из них - это Data Mirror.Другой подход заключается в использовании продукта интеграции среднего уровня, такого как BizTalk или Tibco, которые берут данные из одного или нескольких источников и привязывают их к одному или нескольким местам назначения, но это может быть излишним в зависимости от ваших требований.* Надеюсь, что это помогает и удачи :) 1023 *

2 голосов
/ 15 ноября 2010

Если вы не знакомы с OS / 400, будьте готовы к крутой кривой обучения . Попытайтесь уменьшить боль, пригласив локального мастера AS / 400, он будет незаменим для написания нечетной CL-программы, получения разрешений и т. Д.

Лично я всегда оставался с драйверами ODBC, поставляемыми с клиентским доступом, но только для чтения. Я не могу оправдать это, но десятилетие программирования на AS / 400 научило меня, что пытаться обновить базу данных AS / 400 за пределами AS / 400 - плохая идея.

Действительно возможно вызывать программы AS / 400 CL из вашего приложения .NET и, если бизнес-логика там уже запрограммирована, то использование ее имеет смысл; переизобретать его в .NET дорого, подвержено ошибкам и будет намного медленнее.

То же сообщение для отчетности: используйте существующие, если возможно.

На что обращать внимание (некоторые из них вполне могут быть устаревшими):

DB2 SQL имеет много тонких отличий от других диалектов SQL. Многие СУБД будут принимать

SELECT X, Y FROM A, B WHERE A.T=B.T

как эквивалент

SELECT X,Y FROM A INNER JOIN B ON A.T=B.T

DB2 может или не может видеть это, в зависимости от таблиц. Когда это не так, первый может быть очень медленным. Тем не менее, если у вас есть проблемы с производительностью, есть несколько очень удобных инструментов для анализа планов запросов DB / 2; вам понадобится мастер AS / 400, чтобы использовать их, поскольку они немного неясны.

Если вы находитесь в международной среде, обработка кодовых страниц требует осторожности. Убедитесь, что на все вашей AS / 400 имеют одинаковую системную кодовую страницу.

Если вы работаете с несколькими AS / 400, имейте в виду, что к локальным и удаленным таблицам можно получить прозрачный доступ (с помощью сквозной передачи).

OS / 400 имеет долгую историю обширной обратной поддержки. Как правило, вам не придется беспокоиться о версиях, если все AS / 400, с которыми вы разговариваете, находятся в одном и том же основном выпуске. Это также очень стабильная платформа; Ошибки операционной системы очень редки и быстро исправляются.

Если вы можете управлять им, получите доступ к тестовой системе с привилегией *ALLOBJ. Это позволит вам сосредоточиться на рассматриваемой проблеме и позже заняться проблемами безопасности.

НТН

2 голосов
/ 15 ноября 2010

Я использую драйверы клиентского доступа (как бы они ни назывались сейчас) для подключения к серверу, который, по моему мнению, основан на ADO.NET. Благодаря имеющейся у меня версии драйвера (у нас V5R4) вы не можете и должны создавать хранимые процедуры для вызова программ (что не сложно). Мне показалось, что в последней версии вы можете запускать программы, но я не уверен.

Единственное, на что я хотел бы обратить внимание, - это создать пользователя с теми полномочиями, которые вам необходимы, чтобы делать то, что вам нужно, если кто-то завладеет этим именем пользователя и паролем, они не смогут сделать слишком много. Мы настроили пользователя только для чтения (*USE) и пользователя rwx (*CHANGE).

0 голосов
/ 23 мая 2012

[Извините, не увидел, что это старый пост. Надеюсь, это все еще полезно]

Я написал как зеленый экран, так и .Net приложения. Из моего опыта ..

1. ODBC - работает, но вам нужно установить настройки ODBC на всех ПК пользователя. Поставщик данных .NET лучше благодаря большему количеству специфических компонентов .net и не требует установки параметров ODBC на всех клиентах. До того, как провайдер .net доступен в as400, я в основном использую OLEDB. Подробнее см. http://www -03.ibm.com / systems / i / software / access / windows / dotnet /

2.Используйте хранимые процедуры. Хранимые процедуры обычно быстрее, чем помещать все логики в. Создать SQL или внешнюю хранимую процедуру, написанную на RPG, CL, COBOL, C ++ и т. Д. Я не переписываю всю старую логику RPG в .net, я просто немного меняю старую RPG-программу и превращаю ее во внешнюю хранимую процедура

3. Для отчетов снова используйте хранимые процедуры, которые передали наборы результатов. Это быстро, чище и хорошо работает с Crystal Report.

4.Технические детали. Если у вас много клиентов для установки программы - используйте веб-службы - вам не нужно устанавливать клиентский доступ с правильной версией на всех ПК.

Смотрите вашу версию OS400. Если используется OS400 версии V6R1 и выше, убедитесь, что используется клиентский доступ V5R4 или выше - хранимые процедуры могут не работать должным образом в старом Client Access.

ODBC работает в старом клиентском доступе, но я думаю, что .NET Data Provider работает только в V5R3.

Если вы компилируете программу .net с использованием провайдера данных .NET V6R1, то для вашего пользовательского клиентского доступа также должен быть V6R1.

По возможности используйте хранимую процедуру для безопасности (не нужно выставлять таблицы) и упростите логику программы (можно повторно использовать программу RPG)

На стороне OS400 убедитесь, что системное значение QCCSID установлено с правильным CCSID, например, 37 для английского. Драйвер ODBC, OLEDB, .net автоматически преобразует / переводит соответствующий символ в вашу программу .Net. Никогда не оставляйте значение как 65535.

Надеюсь, это поможет.

...