powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Джентльмены, кто работал с COM+ на VB
20 сообщений из 45, страница 2 из 2
Джентльмены, кто работал с COM+ на VB
    #33672884
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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+
Насколько с ними "лучше", можно посмотреть на примере треда, который я уже приводил. Если очень хочется можно верить, что на самом деле все хорошо, просто руки кривые были
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33673408
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey, а какие средства есть в дотнет для создания (не СОМ) распределенных приложений ?
Куда копать?
И, если (может быть :) для этого достаточно всего-лишь реализовать каие-то интерфейсы, то каие?
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33673493
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffAlexey, а какие средства есть в дотнет для создания (не СОМ) распределенных приложений ?
Куда копать?
И, если (может быть :) для этого достаточно всего-лишь реализовать каие-то интерфейсы, то каие? Ну вот например http://msdn.microsoft.com/msdnmag/issues/02/10/NETRemoting/ но не факт, что это отражает последние взгляды МS на то как надо строить распределенные приложения. :)

вообще искать по словам .Net distributed applications и еще, после того как почитаете про Remoting, искать про Indigo
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33673702
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffДай бы бог что бы так!
Я уже создавал модели предметной области на VB6. Намучился с поддержкой событий и борьбой с циклическими ссылками!Гы! Флаг тебе в руки.)) Я не имел ввиду, что написание всех этих наворотов есть пустяковая задача (лично у меня события COM+ так и не заработали), а то, что уж коли оно сделано в .NET , то и в VB6 через прокси элементарно заработает.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33673809
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovДа, в теории так и должно быть. Просто ... не советую. Система, которую я сейчас пишу, состоит из 7и библиотек, из которых 2 серверные, 4 клиентские и одна общая, описывающая интерфейсы. Одна из серверных отвечает за транспортировку данных, другая за доступ к данным SQL Server'а. Я могу заточить библиотеку доступа под Oracle, под Interbase, да хоть под текстовые файлы, и это никак не коснется остальных 6и звеньев системы. Я могу переписать библиотеку транспорта, чтобы она использовала вместо http непосредственно tcp или еще более непосредственно DCOM - и это никак не отразится на остальных. Могу добавить компрессию и шифрование пакетов и это коснулось бы двух (кошмар!) транспортных библиотек - серверной и клиентской - если бы не было уже реализовано в общей - опять таки одной.

Я с вниманием прислушиваюсь ко всем советам))
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674022
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСистема, которую я сейчас пишу, состоит из 7и библиотек, из которых 2 серверные, 4 клиентские и одна общая, описывающая интерфейсы. Давайте отделять мух от котлет (С)
Вы описали стандартный компонентный подход к проектировнию сколь либо сложных систем и сказали, что изменение одного компонента не приведет к изменению других. Ну это азы проектирования, очевидные даже новичку.

Я же говорю о том, что по возможности не стОит смешивать технологии разных поколений, да еще и в виде downgrade-а более новой технологии. Да, в теории это будет работать. Да, на тестах это тоже будет работать. Однако в дальнейшем при таком подходе возможны, даже более того, весьма вероятны внезапные проблемы с безопасностью, настройкой доступа, производительностью и т.п.
Из треда, который я уже приводил.
Magnus23В жизни бы не подумал что все так просто. После продолжительных копаний и собирания инфы "с миру по нитке" выработал таки более-менее четкий план действий.
Сейчас все это видится простым до неприличия.далее
Magnus23Я на эту бодягу уже 2 проэкта перевожу, нужно только оттестировать хорошенько на предмет перформенса, а так выглядит очень даже ничего себе :).

На счет транзакций, это одна из фичей, но не в первую очередь.

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

Cool, не правда ли?
далее
Magnus23Короче все не так гладко как кажется.
На деле оказалось что та самая прокся для клиента из ремотинга выколупывается.
И все сообщения тоже через него. Выходит так что Enterprise Services херня какая-то. Говорили ж мне: Overhead, Overhead, Overhead...

Плюс еще начали выскакивать какие-то левые проблемы. Оттестеный код который был перенесен из сервиса в компонент вдруг начал вываливатся c StackOverflowException. При чем на строке которая делает вызов API из натиной dll, там никаких лупов и рекурсии в жизни не валялось. Точно так же валятся все API вытзовы.

Поэтому я и сказал "не советую"
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674165
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так:
Код: plaintext
1.
2.
For Each Заказ In РеестрЗаказов.ItemByName("06/171-ЗТ")
   debug.print Заказ.ИмяОбщее
Next
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674169
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ж, вглядимся детально...
Magnus23На деле оказалось что та самая прокся для клиента из ремотинга выколупывается.
И все сообщения тоже через него. Выходит так что Enterprise Services херня какая-то. Говорили ж мне: Overhead, Overhead, Overhead...Не знаю что такое Overhead, но автор ожидал увидеть именно его, а увидел тот же COM+, только в профиль. То есть технология толком не поменялась и ни о каком даунгрейде речи быть не может. Поменялось только средство доставки вызовов - с DCOM на Remoting.
Magnus23Плюс еще начали выскакивать какие-то левые проблемы. Оттестеный код который был перенесен из сервиса в компонент вдруг начал вываливатся c StackOverflowException. При чем на строке которая делает вызов API из натиной dll, там никаких лупов и рекурсии в жизни не валялось. Точно так же валятся все API вытзовы.А это недостатки конкретной реализации. Черным по белому написано - автор копипастнул код из сервиса . А программирование под COM+ предъявляет определенные требования к тому, что и как (особенно апи, да еще в транзакции) должно вызываться по ходу выполнения. Не видя того, что там напрогано, было бы неверно все проблемы валить на то, что технология - отстой. И вообще - проблемы именно в сервере, он даже не успевает отписать результаты работы клиенту - валится. Так что, до момента, на котором могут столкнуться лбами разные технологии дело просто не доходит.

Вобщем, я не вижу убедительных причин (личные фобии не в счет) не делать клиент и сервер на разных технологиях. Но только если это оправдано.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674216
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffЛично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так:Как клиенту юзать серверные объекты - целиком на совести разработчика, а не технологии. Сначала разрабатывается архитектура, потом выбираются средства и методы ее реализации. Допустим так, как написал ты. Это тоже можно сделать двумя путями. Если классы объектов "Заказ" и "РеестрЗаказов" разместить непосредственно на сервере, то тут без COM+ не обойтись. А если на клиенте? Клиенту совершенно без разницы как происходит вызов ItemByName("06/171-ЗТ").Item. В Property Get может находится запрос к серверу любым способом, и именно там может формироваться объектное представление для переменной "Заказ".
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674239
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, значит все что мне нужно - реализовать интерфейсы COM в своих классах и настроить MTS ?
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674245
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffЛично я стал бы связываться с такой технологией распределенной системы где клиентское приложение может юзать объекты сервера приложений примерно так:
Код: plaintext
1.
2.
For Each Заказ In РеестрЗаказов.ItemByName("06/171-ЗТ")
   debug.print Заказ.ИмяОбщее
Next
А оно так и есть :) Только работать с распред. данными именно так не всегда оправдано. Но это отдельная тема, ОЧЕНЬ флеймогонная.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674384
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Antonariy, значит все что мне нужно - реализовать интерфейсы COM в своих классах и настроить MTS ?
Грубо говоря да. А на VB6 и интерфейсов реализовывать не надо.
1. Создаешь ActiveX dll
2. Подключаешь в референсах COM+ Services Type Library.
3. В свойствах класса ставишь желаемый MTSTransactionMode.
4. При вызове метода выполняешь инструкцию GetObjectContext.SetAbort, она запускает транзакцию на SQL сервере.
5. При отсутствии ошибок выполняешь инструкцию GetObjectContext.SetComplete

Полученную dll кидаешь в менеджер COM+, настраиваешь права, выковыриваешь прокси, который ставишь клиентам. Этот прокси можно подключить в референсах клиентского проекта.

Вот минимальный джентельменский набор требований к COM+ dll. Есть еще роли, события, MSMQ, но все это описано в толстых книгах.

Но я не уверен в возможности создания коллекций на стороне сервера. При вызове метода COM+, экземпляр класса, к которому он относится, каждый раз на сервере создается заново.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33674438
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff настроить MTSХе )), не MTS, а DCOM. С мтсом ничего вообще делать не нужно - GetObjectContext.SetAbort включает транзакцию, GetObjectContext.SetComplete ее подтверждает. Все. Главный геморой - именно права DCOM. Под W2k можно просто закинуть библиотеку и назначить юзера, под которым она будет работать, а под XP обязательно добавить хотя бы одну роль. Кроме того, DCOM для вызова удаленных методов использует технологию Remote Procedure Call (RPC Call), а многие файрволлы пакеты RPC блокируют по умолчанию. Это тоже нужно иметь ввиду.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33675194
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovТолько работать с распред. данными именно так не всегда оправдано.Имеются в виду т.н. "говорливые интерфейсы"?
AntonariyНо я не уверен в возможности создания коллекций на стороне сервера. При вызове метода COM+, экземпляр класса, к которому он относится, каждый раз на сервере создается заново.Поясните.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33675196
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще: не очень понятно зачем нужна распределенная транзакция. У меня запускает транзакцию и вообще сохранение всех данных выполняет объект UnitOfWork.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33675395
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff Поясните.
На клиенте:
Код: plaintext
1.
2.
 1  Set ComPlusObj = CreateObject("ComPlusLib.ComPlusClass", "server") 'можно и так, без прокси
 2  ComPlusObj.SomeProperty = SomeVal
 3  x = ComPlusObj.SomeFunction(SomeParam)
На сервере:
Код: plaintext
1.
2.
3.
4.
5.
6.
 1  'в классе ничего не происходит
 2  Class_Initialize()
  Property Let SomeProperty(rhs)
  Class_Terminate()
 3  Class_Initialize()
  Function SomeFunction(param)
  Class_Terminate()
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33675721
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff Alexey KudinovТолько работать с распред. данными именно так не всегда оправдано.Имеются в виду т.н. "говорливые интерфейсы"?
Я не знаю что такое "говорливые интерфейсы" :)
Если вкратце, то существует мнение, что если вы делаете вот так
Код: plaintext
1.
2.
3.
For Each Заказ In РеестрЗаказов.ItemByName("06/171-ЗТ") 
   debug.print Заказ.ИмяОбщее--И здесь каждый раз происходит обращение к серверу приложений
Next
то система "страдает" большим количеством round trip-ов и это плохо. Надо все данные "за раз" вытянуть на клиента и уже там работать с ними. Как я уже говорил, это все это спорно, и в отрыве от конкретной реализации большого смысла обсуждать не имеет.
Если вам не нужны распределенные транзакции, имеет смысл использовать только DCOM.
Только перед проектированием системы прочитайте про STA threading model (MTA VB не поддерживает), а если решите, что вам нужен еще и MTS, то и про принципы создания и работы с объектами под MTS (например http://www.sabbasoft.com/mts_faq_mts.htm) там и про коллекции написано и про создание/уничтожение экземпляров класов под MTS.
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #33675904
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovТолько перед проектированием системы прочитайте про STA threading model Как раз в своем предыдущем посте я на пальцах показал как работает эта модель. Теперь и название знаю :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Джентльмены, кто работал с COM+ на VB
    #35774447
Bruins888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, подскажите что не так в моем коде почему мой объект 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;
}
}
...
Рейтинг: 0 / 0
Джентльмены, кто работал с COM+ на VB
    #35776826
Bruins888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все разобрался
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Джентльмены, кто работал с COM+ на VB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]