Midas, AppServer i DCom
Midas, AppServer i DCom
Re: Midas, AppServer i DCom
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Re: Midas, AppServer i DCom
primer c:\myserver\srv.exe /regserver
Забавлявам се с Midas...
Имам 3 компютъра - PCWIN2K-1, PCWIN2K-2, PCWINXP. Първите два са с WIN2000, третия - с WinXP. Имам си и моето клиент-сървър приложение. И на трите компютъра съм качил и клиента, и сървъра. Сега експериментирам:
1. Пускам клиента на PCWIN2K-1 и му казвам да се върже към сървъра на PCWIN2K-2, няма проблем - клиента се връзва и програмата работи в мрежа -евала!
2. Пускам клиента на PCWIN2K-2 и му казвам да се върже към сървъра на PCWIN2K-1, пак няма проблем - клиента се връзва и програмата работи в мрежа.
3. Пускам клиента на PCWIN2K-1 и му казвам да се върже към сървъра на PCWINXP, няма проблем - клиента се връзва и програмата работи в мрежа .
4. Пускам клиента на PCWIN2K-2 и му казвам да се върже към сървъра на PCWINXP, няма проблем - клиента се връзва и програмата работи в мрежа .
5. Пускам клиента на PCWINXP и му казвам да се върже към сървъра на PCWIN2K-1, има проблем - при стартиране на клиента, сървъра, който се намира на PCWIN2K-1 също се стартира (значи връзка има), обаче Delphi-то на PCWINXP хвърля exception "INTERFACE NOT SUPPORTED" (теста правя по следния начин: на клиентското приложение имам DataModule, вътре в него - DCOMConnection, през който става връзката, съответно на DCOMConnection.ComputerName давам "PCWIN2K-1", DCOMConnection.Conected = true, и тогава се появява exception-a.
6. Същото става ако пусна клиента на PCWINXP и му кажа да се върже към сървъра на PCWIN2K-1
-------------------------------------------------------------------------
През DCOMCNFG-то съм дал пълни права на accounts SYSTEM, INTERACTIVE, ADMINISTARTOR...пуснал съм навсякъде GUEST-a, общо взето мрежата ми е като разграден двор, незнам дали някой ще има проблеми да прави вътре каквото си иска, освен моето клиент-приложение. Явно XP-то забранява на лиента да работи през DCOM, ама защо и откъде се настройва това?
В началото ми даваше друга грешка при опит за връзка - "THE RPC server is unavailable" - четох малко в google, написах в конзолата "regsvr32 ole32.dll" на компютъра с клиентското приложение, после и на този със сървърското и проблема изчезна - някои програми при uninstall явно unregister-ват този dll и оттам се получава проблема, остава обаче другия...та някой ако може да помогне как да се оправя с това XP....ще му останат благодарностите :)
Re: Забавлявам се с Midas...
Re: Забавлявам се с Midas...
var
OC : IInterface;
begin
OC:=TInterface.Create;
CID:=WEBConnection1.AppServer.SetCallback(OC);
.....
end;
и резултата на клиента е exception : "Unsupported variant type: 4009". A от WinXP-то към друг компютър през TWEBConnection вообще не става. Web-servera, който ползвам е Apache 2.0.53....Any ideas?
Re: Забавлявам се с Midas...
P.S.
Нека и някой друг да помага, че аз не съм особено полезен май.
Ето и решение на част от проблемите...
1. DCOM :
- "Тhe RPC server is unavailable" - проблемът се получава най-често когато клиента е на WinXP. Решенията:
* В C:\WINDOWS\SYSTEM32 трябва да имате следните два файл-а: ole32.dll и stdvcl32.dll - ако някой от тях липсва, намерете го някъде (примерно на инсталационното СD, интернет или от друг компютър) и го копирайте в C:\WINDOWS\SYSTEM32. След това отворете конзолата (Start Menu->Run и тук пишете cmd) и напишете последователно "regsvr32 ole32.dll" i "regsvr32 stdvcl32.dll". Проблема е, че при uninstall някои програми Unregister-ват или дори изтриват тези 2 .dll-та. Това е едната възможност
* Във Fireqall-a на WinXP (Start Menu->Settings->Control Panel->Windows Firewall), на първия таб дайте On (Recommended), на втория - Add Program-> и тук добавяте вашето клиентско приложение; Add Port->Name="Midas"; Port="135".
* Ако и това не стане - Start menu->Run и тук пишете "dcomcnfg", за да стартирате DCOM-конфигуратора, в лявата част на появилият се експлорър Избирате Component Services->Computers->My Computer, дясно копче, Properties, Com Security. Оттук на Acces Permisions-> Edit Limits, давате всички възможни права на Annonymous Logon. После на Edit default, добавяте SYSTEM, INTERACTIVE, EVERYONE (или ако сте си направили отделна група потребители за въпросния софтуер, добавяте само нея вместо EVERYONE, останалите две са задължителни), ANNONYMOUS LOGON и им давате всички права. Същото правите и в долния Group Box (Launch and activation permissions), като тук в "Edit Limits" e много вероятно акаунта "ANNONYMOUS LOGON" вообще да не фигурира, в този случай първо го добавете. Дйте му пълни права! Проблема се получава с WinXP->Sevice Pack 2, който изтрива от тук акаунта "ANNONYMOUS LOGON" от "съображения за сигурност" :). Това се прави на клиентския компюър. За компютъра, на който е сървър-а(ако е на ХР), Component Services->Computers->My Computer->DCOM Config->избирате вашия AppServer, ако сте го регистрирали трябва да фигурира тук, ако ли не - регистрирайте го например като стартирате самото приложение. Tук на Permissions добавете гореописаните акаунти със пълни права по начина, по който беше описано по-горе. Проблемите ви би трябвало да приключат!
----------
Бях писал за следната грешка "Interface not supported", когато през Delphi стартирам клиентското приложение (нa WinXP), на съответния DComConnection избера ComputerName=PC2 (т.е. друг компютър) и после Connected=true, въпреки че на другия компютър сървъра се стартира (т.е връзка през DCOM-a ima). Проблема явно е в информацията за Type Library-то, която се пази в регистъра - понеже сървър-приложението го има инсталирано и на ДВАТА компютъра, явно Delphi нещо се бърка, все още не знам защо?? Факт е, че когато стартирам самото .exe на клиента от WinXP-то, и вътре в source-то дам "ComputerName:=PC2;Connected=true;", всичко е наред - връзвам се към remote-сървъра и си бачкам.
---------------
Относно NickBass - CID ми е идентификатор на поредния клиент, който се връзва към сървъра - integer, генерира се нa самия сървър, уникален във всеки един момент. Тва вече ми трябва за логиката на приложението, няма общо с връзката. Нещо не е наред май с Apache-то, настройки....WebConnection-a си се връзва, но когато извикам метода WEBConnection1.AppServer.SetCallback(ОС); се получава "Unsupported variant type: 4009", дори и сървъра и клиента да са на ЕДИН И СЪЩИ компютър....
Засега толкова по темата, ако разбера как става това ще пиша;
И ако някой има проблеми с DCOM под Win2000 ли Win98, може спокойно да пита - аз лично прахосах достатъчно време, може поне на някой друг да го спестя :)
Re: Забавлявам се с Midas...
Освен това четох някъде (не знам дали е вярно, а нямам Delphi да проверя), че TWebConnection не поддържало callback-s - имало някакъв флаг SupportCallback, който се сетвал на false.
Re: Забавлявам се с Midas...
Re: Забавлявам се с Midas...
В отговор на:LiChaoHui - 1849809
多谢几位兄弟, 非常感激, 每人100分作为答谢
Delphi的帮助中,关于SupportCallback是这么解释的,
Determines whether the streamed connection component can handle
callbacks in the application server interface.
property SupportCallbacks: Boolean;
Description
Use SupportCallbacks to indicate whether the connection component
can marshal callback functions in the application server's interface.
When SupportCallbacks is True, the connection component can marshal calls
from the application server to the client application over an interface
supplied as a callback.
For TSocketConnection, callbacks are optional. Set SupportCallbacks to True
if you are using callbacks as part of the application server抯 interface.
When SupportCallbacks is True, the socket connection component requires
WinSock2. Set SupportCallbacks to False if you are not using
callback functions and want to eliminate the dependency on WinSock2.
TWebConnection can抰 support callback functions. It initializes
SupportCallbacks to False in the constructor and never changes this value.
Това е цитат от тук
За концептуалния проблем нямам представа, сигурно е така, както си го направил, никога не съм се "забавлявал с Midas" и за интерфейсите знам само теория.