Produit du jour : Votre boutique sur le web à partir de 8.00 € (Logiciel)
Bonjour.

J'ai un Web Service qui utilise un jeu de DLL (plugins - C++ non
managé). Ces DLL implémentent une même interface.

J'arrive à invoquer les méthodes des 2 premières DLL sans problème, où
que soient les DLL.

Par contre, quand j'utilise la 3° DLL, lors de l'invocation d'une
méthodes, la page se charge indéfiniment... pas de time-out apparemment.

Ces 3 DLL sont chargées via une DLL faite, elle, en C#. Cette dernière
propose les mêmes méthodes pour chacune des DLL. Pourquoi celà
marche-t-il avec 2 des 3 DLL ? Aucune idée... Le schéma d'invaction est
pourtant le même pour chacune des DLL. Les DLL exposent les mêmes
méthodes sous les même signatures.

Je n'arrive pas à accéder à cette troisième DLL. Impossible d'y rentrer
avec le debugger (debuggage de code non managé à 'True' et j'ai bien mis
les dépendances... fonctionne avec les autres DLL - je dispose des
sources, le timestamp du pdb correspond à la DLL associée).

Voici un fragment du code de la DLL/C# :

m_dllToUseForMDM = LoadConfig.Instance.MDMLibraryPATH;

AssemblyName asmName = new AssemblyName();

asmName.Name = "mdmAssembly";
AssemblyBuilder dynamicAsm =
AppDomain.CurrentDomain.DefineDynamicAssembly
(asmName, AssemblyBuilderAccess.Run);
m_dllMethodList = dynamicAsm.DefineDynamicModule("mdmModule");

MethodBuilder AddMethod = null;

...

AddMethod = m_dllMethodList.DefinePInvokeMethod
(
"mdmSetUser",
m_dllToUseForMDM,
MethodAttributes.Static | MethodAttributes.Public |
MethodAttributes.PinvokeImpl,
CallingConventions.Standard,
typeof(int),
new Type[]{ typeof(string), typeof(string), typeof(string) },
CallingConvention.Winapi,
CharSet.Ansi
);
AddMethod.SetImplementationFlags(MethodImplAttributes.PreserveSig |
AddMethod.GetMethodImplementationFlags());
m_dllMethodList.CreateGlobalFunctions();

...

public int mdmSetUser(string pLogin, string pPassword, string pAccount)
{
MethodInfo method = m_dllMethodList.GetMethod("mdmSetUser");
return (int)method.Invoke
(null, new Object[]{ pLogin, pPassword, pAccount });
}

Le blocage se fait sur le return.

Le WS dispose d'une WebMethod SetUser() qui appelle tout simplement
mdmSetUser()

Les différences entre les DLL (elles font exactement les mêmes choses) :

- la première utilise une application externe : Manreo Warehouse,
- la seconde utilise le système local : disque dur,
- la troisième utilise ADO/MySQL.

Voilà, si qq'un peut m'aider, ça serait sympa. 3 jours que je bloque !
Merci anticipé.

--
Delf
mots-clés : web, service, unmanaged, dll Catégories : Développement, ASP.Net
 
Accès refusé
dataset et ne pas afficher si aucun ...
 

 

Téléchargements

Tous les téléchargements