Habe eine Anwendung geschrieben, die einen DCOM-Server benutzt.
Nach diversen Anläufen und Problemen mit der Sicherheit habe ich das ganze zum Laufen bekommen. Ich habe auf der ClientSeite mit
<b>CoInitializeSecurity</b> die Sicherheitsregeln festgelegt.<br>Nun gibt es ein Problem, weil in der Anwendung andere Automation-Server aufgerufen werden. Speziell handelt es sich hierbei um Excel. Beim Aufruf bekomme ich eine Fehlermeldung <b>Schnittstelle wird nicht unterstützt</b>.<br>Nun habe ich schon hier in Forum nach Lösungsansätzen gesucht und die Funktion <b>CoSetProxyBlanket</b> als mögliche Lösung gefunden. Doch leider bekomme ich das ganze nicht wie gewünscht zum Laufen.Habe nun CoInitializeSecurity rausgenommen und dafür CoSetProxyBlanket für das eine Interface (vom DCOM-Server) verwendet<br><br>
<pre>
<b>const</b>
RPC_C_AUTHN_NONE = 0;
RPC_C_AUTHN_WINNT = 10;
RPC_C_AUTHZ_DEFAULT = $FFFFFFFF;
RPC_C_AUTHN_LEVEL_NONE = 1;
RPC_C_IMP_LEVEL_ANONYMOUS = 1;
RPC_C_IMP_LEVEL_IDENTIFY = 2;
EOAC_NONE = 0;
<br>
<b>procedure</b> TServerClient.setServerIPAndCreate(IP: String);
<b>var </b>
aIUnk : IUnknown;
<b>begin </b>
aIUnk:=CoObjectMappingServer_.CreateRemote(ServerI P);
<br>
OleCheck(CoSetProxyBlanket(
aIUnk,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_DEFAULT,nil,RP C_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_IDENTIFY,nil, EOAC_NONE));
<br>
FServer:= aIUnk as IObjectMappingServer;
<br>
OleCheck(CoSetProxyBlanket(
FServer,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_DEFAULT,nil, RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_IDENTIFY,ni l,EOAC_NONE));
<br>
<b>end;</b>
</pre>
Excel-Anwendung startet nun wunderbar, doch die Callbacks vom Server an den Client gehen verloren....
Bitte um Hilfe!
Nach diversen Anläufen und Problemen mit der Sicherheit habe ich das ganze zum Laufen bekommen. Ich habe auf der ClientSeite mit
<b>CoInitializeSecurity</b> die Sicherheitsregeln festgelegt.<br>Nun gibt es ein Problem, weil in der Anwendung andere Automation-Server aufgerufen werden. Speziell handelt es sich hierbei um Excel. Beim Aufruf bekomme ich eine Fehlermeldung <b>Schnittstelle wird nicht unterstützt</b>.<br>Nun habe ich schon hier in Forum nach Lösungsansätzen gesucht und die Funktion <b>CoSetProxyBlanket</b> als mögliche Lösung gefunden. Doch leider bekomme ich das ganze nicht wie gewünscht zum Laufen.Habe nun CoInitializeSecurity rausgenommen und dafür CoSetProxyBlanket für das eine Interface (vom DCOM-Server) verwendet<br><br>
<pre>
<b>const</b>
RPC_C_AUTHN_NONE = 0;
RPC_C_AUTHN_WINNT = 10;
RPC_C_AUTHZ_DEFAULT = $FFFFFFFF;
RPC_C_AUTHN_LEVEL_NONE = 1;
RPC_C_IMP_LEVEL_ANONYMOUS = 1;
RPC_C_IMP_LEVEL_IDENTIFY = 2;
EOAC_NONE = 0;
<br>
<b>procedure</b> TServerClient.setServerIPAndCreate(IP: String);
<b>var </b>
aIUnk : IUnknown;
<b>begin </b>
aIUnk:=CoObjectMappingServer_.CreateRemote(ServerI P);
<br>
OleCheck(CoSetProxyBlanket(
aIUnk,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_DEFAULT,nil,RP C_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_IDENTIFY,nil, EOAC_NONE));
<br>
FServer:= aIUnk as IObjectMappingServer;
<br>
OleCheck(CoSetProxyBlanket(
FServer,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_DEFAULT,nil, RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_IDENTIFY,ni l,EOAC_NONE));
<br>
<b>end;</b>
</pre>
Excel-Anwendung startet nun wunderbar, doch die Callbacks vom Server an den Client gehen verloren....
Bitte um Hilfe!
Comment