PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Utilisation d'assemblage .NET dans un web service
Utilisation d'assemblage .NET dans un web service
Iniciado por mimi1255, 20,nov. 2016 21:29 - 7 respuestas
Miembro registrado
24 mensajes
Publicado el 20,noviembre 2016 - 21:29
Bonjour,

J'ai importé l'assemblage .NET Microsoft.Dynamics.BusinessConnectorNet dans l'un de mes projets. Je fais appel à cet assemblage dans une procédure :
Procedure GetPrinterList(UserCB)
///Déclaration des objets
DynAX est un Microsoft.Dynamics.BusinessConnectorNet.Axapta
DynSAV est un Microsoft.Dynamics.BusinessConnectorNet.Axapta
DynNew est un Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject

//Connexion
DynAX.Logon(Null,Null,Null,"\\ax-sql-prod\axc$\AX-SQL_TEST_AX2009_x64.axc")

//////////*******Récupération de la liste des imprimantes***********//////////
DynNew <- DynAX.CreateAxaptaObject("SPL_ShippingPreparation")
DynSAV<-DynNew.Call("getPrinterList",UserCB)
RENVOYER DynSAV.ToString()


J'ai ensuite publié cela en tant que web service. J'ai donc publié uniquement ma collection de procédure, sans iHM, sans analyse.

Lorsque je me connecte sur le site web pour test le web service, je rencontre une erreur. Avez-vous déjà eu ce genre de problème ?

Merci d'avance pour votre aide.

Retour du serveur web :

<SOAP-ENV:Envelope><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>L'objet de type <Microsoft.Dynamics.BusinessConnectorNet.Axapta> (assemblage <C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll>) n'a pas pu être créé
L'assemblage <C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
Impossible de charger le fichier ou l'assembly 'file:///C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll' ou une de ses dépendances. Tentative de chargement d’un programme de format incorrect.
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert</faultstring><detail>Appel WL :
Traitement de 'Procédure globale GetPrinterList' (COL_ShippingPreparation.GetPrinterList), ligne 5, thread 0

Que s'est-il passé ?
L'objet de type <Microsoft.Dynamics.BusinessConnectorNet.Axapta> (assemblage <C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll>) n'a pas pu être créé
L'assemblage <C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
Impossible de charger le fichier ou l'assembly 'file:///C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll' ou une de ses dépendances. Tentative de chargement d’un programme de format incorrect.
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert

Code erreur : 200007
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200007
Informations de débogage :
System.BadImageFormatException: Impossible de charger le fichier ou l'assembly 'file:///C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll' ou une de ses dépendances. Tentative de chargement d’un programme de format incorrect.
Nom du fichier : 'file:///C:\inetpub\ftproot\FTP_WebDev\WebServices\SPL_ShippingPreparation\SPL_SHIPPINGPREPARATION_WEB\Microsoft.Dynamics.BusinessConnectorNet.dll'
à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
à System.Reflection.Assembly.LoadFrom(String assemblyFile)
à CDotNetLoader.__pclLoadAssembly(CDotNetLoader* , Char* pszFileName, CXError* pclErreur)

AVT : le journal de liaison d'assembly est désactivé.
Pour activer le journal des échecs de liaison d'assembly, attribuez la valeur 1 à la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD).
Remarque : une certaine perte de performance est associée à l'enregistrement dans le journal des échecs de liaison d'assembly.
Pour désactiver cette fonctionnalité, supprimez la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog].

Informations supplémentaires :
EIT_PILEWL :
Procédure globale GetPrinterList (COL_ShippingPreparation.GetPrinterList), ligne 5
EIT_DATEHEURE : 20/11/2016 21:28:46
EIT_TYPE_WDFILE : <7>
EIT_IDCODE : <458752>
EIT_XINFO : <4>

----- Sous-erreur n°1 -----

Que s'est-il passé ?
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert

Code erreur : 200003
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200003


----- Sous-erreur n°2 -----

Que s'est-il passé ?
L'assemblage <C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
Impossible de charger le fichier ou l'assembly 'file:///C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll' ou une de ses dépendances. Le fichier spécifié est introuvable.

Code erreur : 200007
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200007
Informations de débogage :
System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly 'file:///C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll' ou une de ses dépendances. Le fichier spécifié est introuvable.
Nom du fichier : 'file:///C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll'
à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
à System.Reflection.Assembly.LoadFrom(String assemblyFile)
à CDotNetLoader.__pclLoadAssemblyWithFullPath(CDotNetLoader* , Char* pszFileName, CXError* pclErreur)

AVT : le journal de liaison d'assembly est désactivé.
Pour activer le journal des échecs de liaison d'assembly, attribuez la valeur 1 à la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD).
Remarque : une certaine perte de performance est associée à l'enregistrement dans le journal des échecs de liaison d'assembly.
Pour désactiver cette fonctionnalité, supprimez la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog].



----- Sous-erreur n°3 -----

Que s'est-il passé ?
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert

Code erreur : 200003
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200003

</detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Miembro registrado
24 mensajes
Publicado el 21,noviembre 2016 - 20:20
Bonjour,

D'après le support de PC soft, il me manquerait des dépendances (autres DLL, une version spécifique du framework DotNet) qui n'ont pas été trouvée en exécution. Comment puis-je savoir quels sont les éléments manquants ?

Merci pour votre aide.
Miembro registrado
962 mensajes
Publicado el 21,noviembre 2016 - 23:08
hello,
d'après tes traces, il me semble que le problème vient du fait que tu attaques une dll 32 bits à partir d'une application 64 bits .
pour windev :
Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).

pour Microsoft.Dynamics :
Que s'est-il passé ?
L'objet de type <Microsoft.Dynamics.BusinessConnectorNet.Axapta> (assemblage <C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Microsoft.Dynamics.BusinessConnectorNet.dll>) n'a pas pu être créé

et surtout c'est l'exception qui indique le problème :
System.BadImageFormatException: Impossible de charger le fichier ou l'assembly

voilà ce que dit Microsoft sur le sujet :
Une exception BadImageFormatException est levée lorsque l'image fichier d'une DLL ou d'un programme exécutable n'est pas valide.
Conseils associés !
Si votre application utilise les composants 32 bits, assurez-vous qu'elle s'exécute toujours comme une application 32 bits.
Si la propriété Plateforme cible de votre projet d'application a la valeur AnyCPU, l'application compilée peut être exécutée en mode 64 bits ou 32 bits. Lorsqu'il s'exécute comme une application 64 bits, le compilateur juste-à-temps (JIT) génère du code natif 64 bits. Si l'application dépend d'un composant managé ou natif 32 bits, ce composant ne pourra pas être chargé en mode 64 bits. Pour résoudre ce problème, attribuez la valeur x86 à la propriété Plateforme cible, puis recompilez.


--
Ami calmant, J.P
Miembro registrado
24 mensajes
Publicado el 22,noviembre 2016 - 20:38
Bonjour,
Merci pour ta réponse.
En fait si je teste l'assemblage .NET directement sur mon PC dans une application windev, il n'y a pas de souci (DLL en 32 bits et application windev 32 bits).

Cependant dès que j'intègre l'assemblage .NET dans un web service et que je déploie ce web service sur un serveur d'application, je rencontre l'erreur dont je vous ai parlé précédemment quand je tente d'accéder à ce web service par la page web.

Ma question est la suivante : dois-je utiliser l'assemblage .NET en 64 bits pour déployer mon webservice parce que le serveur web est en 64 bits ?

Merci d'avance.
Publicado el 23,noviembre 2016 - 09:06
Bonjour,

Je viens de tester en intégrant l'assemblage .NET en version 64 bits.
Mais je rencontre un autre souci, je joins l'erreur ci-dessous. Avez-vous une idée de l'origine du problème ?

Merci encore.

<SOAP-ENV:Envelope><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>L'invocation de la méthode <Logon(System.String,System.String,System.String,System.String)> du type <Void> a échoué
Le framework .NET a renvoyé l'erreur suivante :
Failed to initialize Business connector.</faultstring><detail>Appel WL :
Traitement de 'Procédure globale GetPrinterList' (COL_ShippingPreparation.GetPrinterList), ligne 10, thread 0

Que s'est-il passé ?
L'invocation de la méthode <Logon(System.String,System.String,System.String,System.String)> du type <Void> a échoué
Le framework .NET a renvoyé l'erreur suivante :
Failed to initialize Business connector.

Code erreur : 200002
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200002
Informations de débogage :
System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> Microsoft.Dynamics.BusinessConnectorNet.InitializationFailedException: Failed to initialize Business connector.
à Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(BC_PROXY_ACCOUNT_INFO* pBCProxyAccountInfo, String company, String language, String objectServer, String configuration)
à Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(String company, String language, String objectServer, String configuration)
--- Fin de la trace de la pile d'exception interne ---
à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
à CDotNetMethod.bInvoke(Char* pszTypeName, Char* pszMethodName, Char* pszParameters, MethodInfo gcMethod, Object gcObj, CSLevel* pclPile, Int32 nNbParamPile, Int32 bValeurRetour, STOperationDotNet* pstOperation)
Informations supplémentaires :
EIT_EXCEPTIONDOTNET
EIT_PILEWL :
Procédure globale GetPrinterList (COL_ShippingPreparation.GetPrinterList), ligne 10
EIT_DATEHEURE : 23/11/2016 08:57:59
EIT_TYPE_WDFILE : <7>
EIT_IDCODE : <458752>
EIT_XINFO : <4></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Miembro registrado
24 mensajes
Publicado el 23,noviembre 2016 - 09:24
Bonjour,
En testant en mode débug, avec le l'assemblage .NET en 64 bits, je viens de trouver une autre erreur qui est certainement à l'origine de mon problème, mais je ne sais pas comment résoudre cela. Le fait d'utiliser windev en vers 32 bits peut-il être un problème ?
Merci encore.

----- Sous-erreur n°1 -----

Que s'est-il passé ?
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
L'assembly en mode mixte est créé avec la version 'v2.0.50727' du runtime et ne peut pas être chargé dans le runtime 4.0 sans d'autres informations de configuration.
Mensaje modificado, 23,noviembre 2016 - 09:25
Miembro registrado
24 mensajes
Publicado el 23,noviembre 2016 - 20:37
Bonjour,
Après différents essais. j'ai réussi à faire fonctionner l'accès à l'assemblage .NET par contre il me reste une erreur, ci-dessous, que je n'ai pas réussi à solutionné. Si vous avez une idée, je suis preneur. Merci encore pour votre aide.

SOAP-ENV:Envelope><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>L'invocation de la méthode <Logon(System.String,System.String,System.String,System.String)> du type <Void> a échoué
Le framework .NET a renvoyé l'erreur suivante :
Failed to initialize Business connector.</faultstring><detail>Appel WL :
Traitement de 'Procédure globale GetCarrierList' (COL_ShippingPreparation.GetCarrierList), ligne 20, thread 0

Que s'est-il passé ?
L'invocation de la méthode <Logon(System.String,System.String,System.String,System.String)> du type <Void> a échoué
Le framework .NET a renvoyé l'erreur suivante :
Failed to initialize Business connector.

Code erreur : 200002
Niveau : erreur fatale

Dump de l'erreur du module 'wd210net2_64.dll' (21.0.20.0).
Identifiant des informations détaillées (.err) : 200002
Informations de débogage :
System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> Microsoft.Dynamics.BusinessConnectorNet.InitializationFailedException: Failed to initialize Business connector.
à Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(BC_PROXY_ACCOUNT_INFO* pBCProxyAccountInfo, String company, String language, String objectServer, String configuration)
à Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(String company, String language, String objectServer, String configuration)
--- Fin de la trace de la pile d'exception interne ---
à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
à CDotNetMethod.bInvoke(Char* pszTypeName, Char* pszMethodName, Char* pszParameters, MethodInfo gcMethod, Object gcObj, CSLevel* pclPile, Int32 nNbParamPile, Int32 bValeurRetour, STOperationDotNet* pstOperation)
Informations supplémentaires :
EIT_EXCEPTIONDOTNET
EIT_PILEWL :
Procédure globale GetCarrierList (COL_ShippingPreparation.GetCarrierList), ligne 20
EIT_DATEHEURE : 23/11/2016 20:34:34
EIT_TYPE_WDFILE : <7>
EIT_IDCODE : <458752>
EIT_XINFO : <4></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Publicado el 30,enero 2020 - 12:50
mimi1255 a écrit :
Bonjour,
En testant en mode débug, avec le l'assemblage .NET en 64 bits, je viens de trouver une autre erreur qui est certainement à l'origine de mon problème, mais je ne sais pas comment résoudre cela. Le fait d'utiliser windev en vers 32 bits peut-il être un problème ?
Merci encore.

----- Sous-erreur n°1 -----

Que s'est-il passé ?
L'assemblage <Microsoft.Dynamics.BusinessConnectorNet> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
L'assembly en mode mixte est créé avec la version 'v2.0.50727' du runtime et ne peut pas être chargé dans le runtime 4.0 sans d'autres informations de configuration.


Bonjour j'ai la meme erreur avec un assemblage .NET ajouté, pourriez vous me dire la solution ??