Имеется DLL библиотека реализующая несколько COM интерфейсов, которая планируется использоваться в ASP.NET. В связи с тем, что библиотека изначально была написана для использования в нативных Windows приложениях, для передачи данных и уведомления клиента в ней используются сообщения Windows. В ASP это работать не будет, поэтому интересует механизм передачи уведомлений + данных непосредственно из созданного COM объекта в среду ASP. Как это правильнее реализовать? Представляется передача в COM какого-то класса, который реализуется на ASP, с последующим вызовом его методов из COM объекта. Такое возможно?
И будет ли работать такая связка в IIS, если COM объект создает TCP/IP socket для установления соединения с удаленным сервером, при получении данных от которого и будут отправляться уведомления в ASP?
вызываешь из ASP.NET свой COM-Server, который будет хоститься в ASP.NET — процессе; COM server должен быть зарегистрирован только на вебсервере;
iis application pool identity под которым выполняется ASP.NET — процесс, должен иметь соответствующие права для вызовов твоего COM сервера;
в коде ASP.NET можешь прикрутить уведомления для клиентов через SignalR (htttp(s)) или через какие-то message queues...
ну а вообще так себе метод: скорее всего, будет не очень быстро, наверное, имело бы смысл этот COM просто переписать на C#
есть ещё так называемый DCOM / COM +, но это уже уровень вымерших динозавров и мамонтов
если очень надо чего-то там вызывать по TCP/IP , то можешь посмотреть в сторону WCF , там можно хостить WCF сервис, который делает protocol bridging : для клиентов он доступен через http(s), а вызовы дальше делает через TCP/IP, но это тоже древняя технология, которая майкрософтом не развивается
Re: Как реализовать механизм нотификации между ASP.NET приложением и COM DLL?
D> используются сообщения Windows. В ASP это работать не будет, поэтому интересует механизм передачи уведомлений + данных непосредственно из созданного COM объекта в среду ASP.
что имеется в виду? windows messages типа WM_NCRBUTTONDBLCLK ?
теоретически можно было бы запустить на версервере какое-то winForms приложение, которое хостит этот COM, ну и передавать между ASP.NET & WinForms туда-сюда какие-то сообщения через Named Pipes / MemoryMappedFile
но это дичь, имхо проще COM переписать
Re[2]: Как реализовать механизм нотификации между ASP.NET приложением и COM DLL?
D>> используются сообщения Windows. В ASP это работать не будет, поэтому интересует механизм передачи уведомлений + данных непосредственно из созданного COM объекта в среду ASP.
T>что имеется в виду? windows messages типа WM_NCRBUTTONDBLCLK ?
T>теоретически можно было бы запустить на версервере какое-то winForms приложение, которое хостит этот COM, ну и передавать между ASP.NET & WinForms туда-сюда какие-то сообщения через Named Pipes / MemoryMappedFile
T>но это дичь, имхо проще COM переписать
Сообщения свои, определенные вида WM_USER+. С ASP.NET никогда не работал, но если там есть возможности создать TCP/IP соединение через socket с функциями Send/Receive, тогда действительно проще написать все на C# и не использовать COM.
Re[3]: Как реализовать механизм нотификации между ASP.NET приложением и COM DLL?
T>>но это дичь, имхо проще COM переписать
D>Сообщения свои, определенные вида WM_USER+. С ASP.NET никогда не работал, но если там есть возможности создать TCP/IP соединение через socket с функциями Send/Receive, тогда действительно проще написать все на C# и не использовать COM.
Здравствуйте, dreamcharger, Вы писали:
D>С ASP.NET никогда не работал, но если там есть возможности создать TCP/IP соединение через socket с функциями Send/Receive
Есть конечно.
WBR, Igor Evgrafov
Re[4]: Как реализовать механизм нотификации между ASP.NET приложением и COM DLL?
D>>С ASP.NET никогда не работал, но если там есть возможности создать TCP/IP соединение через socket с функциями Send/Receive GIV>Есть конечно.
так-то оно так, но имхо с точки зрения архитектуры какое-то уродство получится, даже хуже, чем в тулу с 10 самоварами
1) придётся следить за временем жизни того куска кода, который подписался нa receive, т.е. либо в global.asa по типу чего-то такого https://pastebin.com/BnfEKnk4 либо загружать синглетоны в сессию, и что делать, если веб сервер перезагрузится ?!
2) не говоря уже о том, что отправлять tcp packet из http — то ещё развлечение (OSI model sends its greetings)...