Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de
manière à mettre en place un timeout que cette méthode ne gère pas. Le
tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si
je place le même appel dans la méthode exécutée de manière asynchrone,
une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante.
Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette méthode ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
adebaene
Stephane a écrit :
Bonjour,
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de manière à mettre en place un timeout que cette méthode ne gère pa s. Le tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si je place le même appel dans la méthode exécutée de manière asyn chrone, une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante. Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette mét hode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé sur un thread ouvrier du pool de thread .NET. Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le cas du thread ouvrier qui fait réellement le boulot, d'où l'acces refusé.
La seule solution est d'impersonner manuellement le client dans ton thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX. Il faut donc que, dans ton thread "principal" tu appelles WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à ton thread ouvrier, et que dans ton thread ouvrier tu fasses un Impersonate sur cet objet avant d'appeler de manière syncrhone ton ActiveX.
Arnaud MVP - VC
Stephane a écrit :
Bonjour,
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de
manière à mettre en place un timeout que cette méthode ne gère pa s. Le
tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si
je place le même appel dans la méthode exécutée de manière asyn chrone,
une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante.
Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette mét hode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé
sur un thread ouvrier du pool de thread .NET.
Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui
fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le
cas du thread ouvrier qui fait réellement le boulot, d'où l'acces
refusé.
La seule solution est d'impersonner manuellement le client dans ton
thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX.
Il faut donc que, dans ton thread "principal" tu appelles
WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à
ton thread ouvrier, et que dans ton thread ouvrier tu fasses un
Impersonate sur cet objet avant d'appeler de manière syncrhone ton
ActiveX.
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de manière à mettre en place un timeout que cette méthode ne gère pa s. Le tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si je place le même appel dans la méthode exécutée de manière asyn chrone, une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante. Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette mét hode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé sur un thread ouvrier du pool de thread .NET. Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le cas du thread ouvrier qui fait réellement le boulot, d'où l'acces refusé.
La seule solution est d'impersonner manuellement le client dans ton thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX. Il faut donc que, dans ton thread "principal" tu appelles WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à ton thread ouvrier, et que dans ton thread ouvrier tu fasses un Impersonate sur cet objet avant d'appeler de manière syncrhone ton ActiveX.
Arnaud MVP - VC
Stephane
Bonjour,
Merci pour ces explications à la fois très claires et très précises sur l'origine du problème et la manière de le résoudre.
Stéphane
a écrit :
Stephane a écrit :
Bonjour,
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de manière à mettre en place un timeout que cette méthode ne gère pas. Le tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si je place le même appel dans la méthode exécutée de manière asynchrone, une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante. Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette méthode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé sur un thread ouvrier du pool de thread .NET. Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le cas du thread ouvrier qui fait réellement le boulot, d'où l'acces refusé.
La seule solution est d'impersonner manuellement le client dans ton thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX. Il faut donc que, dans ton thread "principal" tu appelles WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à ton thread ouvrier, et que dans ton thread ouvrier tu fasses un Impersonate sur cet objet avant d'appeler de manière syncrhone ton ActiveX.
Arnaud MVP - VC
Bonjour,
Merci pour ces explications à la fois très claires et très précises sur
l'origine du problème et la manière de le résoudre.
Stéphane
adebaene@club-internet.fr a écrit :
Stephane a écrit :
Bonjour,
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de
manière à mettre en place un timeout que cette méthode ne gère pas. Le
tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si
je place le même appel dans la méthode exécutée de manière asynchrone,
une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante.
Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette méthode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé
sur un thread ouvrier du pool de thread .NET.
Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui
fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le
cas du thread ouvrier qui fait réellement le boulot, d'où l'acces
refusé.
La seule solution est d'impersonner manuellement le client dans ton
thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX.
Il faut donc que, dans ton thread "principal" tu appelles
WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à
ton thread ouvrier, et que dans ton thread ouvrier tu fasses un
Impersonate sur cet objet avant d'appeler de manière syncrhone ton
ActiveX.
Merci pour ces explications à la fois très claires et très précises sur l'origine du problème et la manière de le résoudre.
Stéphane
a écrit :
Stephane a écrit :
Bonjour,
Je souhaite appeler une méthode sur un ActiveX de manière asynchrone de manière à mettre en place un timeout que cette méthode ne gère pas. Le tout depuis un webservice autorisant l'impersonate.
L'appel à cette méthode fonctionne en dehors de l'appel asynchrone. Si je place le même appel dans la méthode exécutée de manière asynchrone, une exception est générée du type "Accés refusé".
L'activeX sert essentiellement à se connecter sur une bdd distante. Cela peut-il avoir un lien ?
Avez-vous une idée sur ce qui pourrait bloquer l'appel à cette méthode ?
Quand tu fais un appel asynchrone, l'appel est réellement réalisé sur un thread ouvrier du pool de thread .NET. Par ailleurs, l'impersonation se fait par thread. Donc, ton threadqui fait le BeginInvoke impersonne bien ton client, mais ce n'est pas le cas du thread ouvrier qui fait réellement le boulot, d'où l'acces refusé.
La seule solution est d'impersonner manuellement le client dans ton thread ouvrier avant de faire un appel (synchrone!) à l'ActiveX. Il faut donc que, dans ton thread "principal" tu appelles WindowsIdentity.GetCurrent() et que tu passes l'identity retournée à ton thread ouvrier, et que dans ton thread ouvrier tu fasses un Impersonate sur cet objet avant d'appeler de manière syncrhone ton ActiveX.