|
|
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Antonariy Alexey Kudinov"кусочек" переписать не получится, Это почему же не получится переписать один из кусочков классической трехзвенной системы? Вообще-то разбиение на звенья придумано заодно и для того, чтобы при изменениях не переделывать всё разом. А если в архитектуру системы заложены интерфейсы, на основании которых реализуются классы взаимодействия между компонентами, то переделать такой класс можно и на .NET Да, в теории так и должно быть. Просто ... не советую. AntonariyC COM+ в .NET дела обстоят еще лучше, чем в VB6. MSDN<skipped>Поставив где нужно галочку Expose to COM, можно прозрачненько юзать такой сервер из VB6. Это понятно все, можно было и не цитировать столь обильно MSDN. Еще раз. COM+ появился ДО .Net. .Net на момент выхода обладал технологией, позволяющей создавать распределенные приложения (Remoting) и не обладал технологией позволяющей управлять транзакциями. Т.о. из двух составляющих COM+ (DCOM и MTS) у .Net была замена только одной, DCOM-у. Так появились Enterprise Services, которые суть есть .Net-овская обертка над COM+ Насколько с ними "лучше", можно посмотреть на примере треда, который я уже приводил. Если очень хочется можно верить, что на самом деле все хорошо, просто руки кривые были ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 11:13 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Alexey, а какие средства есть в дотнет для создания (не СОМ) распределенных приложений ? Куда копать? И, если (может быть :) для этого достаточно всего-лишь реализовать каие-то интерфейсы, то каие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 13:14 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
WorobjoffAlexey, а какие средства есть в дотнет для создания (не СОМ) распределенных приложений ? Куда копать? И, если (может быть :) для этого достаточно всего-лишь реализовать каие-то интерфейсы, то каие? Ну вот например http://msdn.microsoft.com/msdnmag/issues/02/10/NETRemoting/ но не факт, что это отражает последние взгляды МS на то как надо строить распределенные приложения. :) вообще искать по словам .Net distributed applications и еще, после того как почитаете про Remoting, искать про Indigo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 13:41 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
WorobjoffДай бы бог что бы так! Я уже создавал модели предметной области на VB6. Намучился с поддержкой событий и борьбой с циклическими ссылками!Гы! Флаг тебе в руки.)) Я не имел ввиду, что написание всех этих наворотов есть пустяковая задача (лично у меня события COM+ так и не заработали), а то, что уж коли оно сделано в .NET , то и в VB6 через прокси элементарно заработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 14:40 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovДа, в теории так и должно быть. Просто ... не советую. Система, которую я сейчас пишу, состоит из 7и библиотек, из которых 2 серверные, 4 клиентские и одна общая, описывающая интерфейсы. Одна из серверных отвечает за транспортировку данных, другая за доступ к данным SQL Server'а. Я могу заточить библиотеку доступа под Oracle, под Interbase, да хоть под текстовые файлы, и это никак не коснется остальных 6и звеньев системы. Я могу переписать библиотеку транспорта, чтобы она использовала вместо http непосредственно tcp или еще более непосредственно DCOM - и это никак не отразится на остальных. Могу добавить компрессию и шифрование пакетов и это коснулось бы двух (кошмар!) транспортных библиотек - серверной и клиентской - если бы не было уже реализовано в общей - опять таки одной. Я с вниманием прислушиваюсь ко всем советам)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 15:07 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
AntonariyСистема, которую я сейчас пишу, состоит из 7и библиотек, из которых 2 серверные, 4 клиентские и одна общая, описывающая интерфейсы. Давайте отделять мух от котлет (С) Вы описали стандартный компонентный подход к проектировнию сколь либо сложных систем и сказали, что изменение одного компонента не приведет к изменению других. Ну это азы проектирования, очевидные даже новичку. Я же говорю о том, что по возможности не стОит смешивать технологии разных поколений, да еще и в виде downgrade-а более новой технологии. Да, в теории это будет работать. Да, на тестах это тоже будет работать. Однако в дальнейшем при таком подходе возможны, даже более того, весьма вероятны внезапные проблемы с безопасностью, настройкой доступа, производительностью и т.п. Из треда, который я уже приводил. Magnus23В жизни бы не подумал что все так просто. После продолжительных копаний и собирания инфы "с миру по нитке" выработал таки более-менее четкий план действий. Сейчас все это видится простым до неприличия.далее Magnus23Я на эту бодягу уже 2 проэкта перевожу, нужно только оттестировать хорошенько на предмет перформенса, а так выглядит очень даже ничего себе :). На счет транзакций, это одна из фичей, но не в первую очередь. В первую очередь это наличие централизованного сервера компонетов на котором можно держать бизнес-логику и слой доступа к данным отдельными компонентами и иметь возможность актуализации этого дела только на одной машине - сервере, а все пять тясяч клиентов и знать об этом не будут. Cool, не правда ли? далее Magnus23Короче все не так гладко как кажется. На деле оказалось что та самая прокся для клиента из ремотинга выколупывается. И все сообщения тоже через него. Выходит так что Enterprise Services херня какая-то. Говорили ж мне: Overhead, Overhead, Overhead... Плюс еще начали выскакивать какие-то левые проблемы. Оттестеный код который был перенесен из сервиса в компонент вдруг начал вываливатся c StackOverflowException. При чем на строке которая делает вызов API из натиной dll, там никаких лупов и рекурсии в жизни не валялось. Точно так же валятся все API вытзовы. Поэтому я и сказал "не советую" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 16:10 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Лично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 16:58 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Что ж, вглядимся детально... Magnus23На деле оказалось что та самая прокся для клиента из ремотинга выколупывается. И все сообщения тоже через него. Выходит так что Enterprise Services херня какая-то. Говорили ж мне: Overhead, Overhead, Overhead...Не знаю что такое Overhead, но автор ожидал увидеть именно его, а увидел тот же COM+, только в профиль. То есть технология толком не поменялась и ни о каком даунгрейде речи быть не может. Поменялось только средство доставки вызовов - с DCOM на Remoting. Magnus23Плюс еще начали выскакивать какие-то левые проблемы. Оттестеный код который был перенесен из сервиса в компонент вдруг начал вываливатся c StackOverflowException. При чем на строке которая делает вызов API из натиной dll, там никаких лупов и рекурсии в жизни не валялось. Точно так же валятся все API вытзовы.А это недостатки конкретной реализации. Черным по белому написано - автор копипастнул код из сервиса . А программирование под COM+ предъявляет определенные требования к тому, что и как (особенно апи, да еще в транзакции) должно вызываться по ходу выполнения. Не видя того, что там напрогано, было бы неверно все проблемы валить на то, что технология - отстой. И вообще - проблемы именно в сервере, он даже не успевает отписать результаты работы клиенту - валится. Так что, до момента, на котором могут столкнуться лбами разные технологии дело просто не доходит. Вобщем, я не вижу убедительных причин (личные фобии не в счет) не делать клиент и сервер на разных технологиях. Но только если это оправдано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 17:01 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
WorobjoffЛично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так:Как клиенту юзать серверные объекты - целиком на совести разработчика, а не технологии. Сначала разрабатывается архитектура, потом выбираются средства и методы ее реализации. Допустим так, как написал ты. Это тоже можно сделать двумя путями. Если классы объектов "Заказ" и "РеестрЗаказов" разместить непосредственно на сервере, то тут без COM+ не обойтись. А если на клиенте? Клиенту совершенно без разницы как происходит вызов ItemByName("06/171-ЗТ").Item. В Property Get может находится запрос к серверу любым способом, и именно там может формироваться объектное представление для переменной "Заказ". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 17:13 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Antonariy, значит все что мне нужно - реализовать интерфейсы COM в своих классах и настроить MTS ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 17:17 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
WorobjoffЛично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 17:17 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Создаешь ActiveX dll 2. Подключаешь в референсах COM+ Services Type Library. 3. В свойствах класса ставишь желаемый MTSTransactionMode. 4. При вызове метода выполняешь инструкцию GetObjectContext.SetAbort, она запускает транзакцию на SQL сервере. 5. При отсутствии ошибок выполняешь инструкцию GetObjectContext.SetComplete Полученную dll кидаешь в менеджер COM+, настраиваешь права, выковыриваешь прокси, который ставишь клиентам. Этот прокси можно подключить в референсах клиентского проекта. Вот минимальный джентельменский набор требований к COM+ dll. Есть еще роли, события, MSMQ, но все это описано в толстых книгах. Но я не уверен в возможности создания коллекций на стороне сервера. При вызове метода COM+, экземпляр класса, к которому он относится, каждый раз на сервере создается заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 17:50 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Worobjoff настроить MTSХе )), не MTS, а DCOM. С мтсом ничего вообще делать не нужно - GetObjectContext.SetAbort включает транзакцию, GetObjectContext.SetComplete ее подтверждает. Все. Главный геморой - именно права DCOM. Под W2k можно просто закинуть библиотеку и назначить юзера, под которым она будет работать, а под XP обязательно добавить хотя бы одну роль. Кроме того, DCOM для вызова удаленных методов использует технологию Remote Procedure Call (RPC Call), а многие файрволлы пакеты RPC блокируют по умолчанию. Это тоже нужно иметь ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 18:05 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovТолько работать с распред. данными именно так не всегда оправдано.Имеются в виду т.н. "говорливые интерфейсы"? AntonariyНо я не уверен в возможности создания коллекций на стороне сервера. При вызове метода COM+, экземпляр класса, к которому он относится, каждый раз на сервере создается заново.Поясните. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 08:09 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Да, и еще: не очень понятно зачем нужна распределенная транзакция. У меня запускает транзакцию и вообще сохранение всех данных выполняет объект UnitOfWork. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 08:12 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Worobjoff Поясните. На клиенте: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 09:46 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Worobjoff Alexey KudinovТолько работать с распред. данными именно так не всегда оправдано.Имеются в виду т.н. "говорливые интерфейсы"? Я не знаю что такое "говорливые интерфейсы" :) Если вкратце, то существует мнение, что если вы делаете вот так Код: plaintext 1. 2. 3. Если вам не нужны распределенные транзакции, имеет смысл использовать только DCOM. Только перед проектированием системы прочитайте про STA threading model (MTA VB не поддерживает), а если решите, что вам нужен еще и MTS, то и про принципы создания и работы с объектами под MTS (например http://www.sabbasoft.com/mts_faq_mts.htm) там и про коллекции написано и про создание/уничтожение экземпляров класов под MTS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 11:13 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovТолько перед проектированием системы прочитайте про STA threading model Как раз в своем предыдущем посте я на пальцах показал как работает эта модель. Теперь и название знаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 11:55 |
|
||
|
Джентльмены, кто работал с COM+ на VB
|
|||
|---|---|---|---|
|
#18+
Уважаемые, подскажите что не так в моем коде почему мой объект com+ не регистрируется пишет ошибка. Заранее буду благодарен. Файл пар-ключ создал утилитой sn.exe Библиотека Framework 2.0 Invalid ServicedComponent-derived classes were found in the assembly <Classes must be puplic, concrete? have a public default constructor ............ и т.д. Мой код using System; using System.EnterpriseServices; using System.Data.SqlClient; using System.Reflection; [assembly: ApplicationName("ServicedComponentInserted")] [assembly: AssemblyKeyFile("SqlServer2000\\ServicedComponentInserted" + "\\bin\\Release\\ServicedComponentInserted.snk")] [assembly: Description("Serviced Component Unload")] namespace ServicedComponentInserted { [Transaction(TransactionOption.Required)] public class InsertedComponentServiced : ServicedComponent { public InsertedComponentServiced() :base() { } public string InsertedTransaction(bool error) { string statusMsg = "Transaction Not Attempted Yet"; SqlConnectionStringBuilder strConnection = new SqlConnectionStringBuilder(); strConnection.DataSource = @"BROKER"; strConnection.InitialCatalog = "Resources"; strConnection.IntegratedSecurity = true; SqlConnection conn = new SqlConnection(strConnection.ConnectionString); string strSQL = "INSERT INTO dbo.Departs(Description) " + "VALUES('Managmnet " + DateTime.Now + "')"; SqlCommand cmd = new SqlCommand(strSQL, conn); try { conn.Open(); cmd.ExecuteNonQuery(); if (error) { strSQL = "INSERT INTO dbo.Departs(Description) " + "VALUES('BadValue')"; cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); } ContextUtil.SetComplete(); statusMsg = "Transaction Success"; } catch (Exception) { ContextUtil.SetAbort(); statusMsg = "Transaction Failure"; } finally { conn.Close(); } return statusMsg; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2009, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33674165&tid=2161400]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 331ms |

| 0 / 0 |
