PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD16] DLL C# SharpDevelop Windev Webservice SharePoint
[WD16] DLL C# SharpDevelop Windev Webservice SharePoint
Débuté par Alex, 21 juil. 2011 19:44 - 8 réponses
Posté le 21 juillet 2011 - 19:44
Bonjour,

On doit piloter un webservice Sharepoint : mettre à jour des listes.
Le prestataire nous a fourni un exemple en C# qui fonctionne.
Coté Windev on importe le webservice mais impossible de l'utiliser.

Donc on s'est dit que on va faire une DLL C# avec les méthodes pour manipuler le webservice puis l'appeler dans le traitement Windev. Pour éditer le C# on a pris SharpDevelop.

Pour commencer on essaye déjà de faire une DLL ultra simple qui fait une addition, et de l'appeler dans Windev à partir de ce code exemple : http://msdn.microsoft.com/fr-fr/library/3707x96z%28v=vs.80%29.aspx…

On a crée et testé la DLL C# avec SharpDevelop :
ok on a une trace console de l'addition.

Ensuite on importe la DLL dans Windev :
on a bien les deux classes MultiplyClass et AddClass dans le volet assemblage .NET.

Ensuite on écrit ce code :
nRes1 = MultiplyClass::Multiply(n1, n2)
nRes2 = AddClass::Add(n1, n1)
Info(nRes1, nRes2)

Et donc la à la 1ere ligne on a l'erreur suivante (cf. ci apres).
A-t-on oublié un truc au niveau de la DLL ? Dans SharpDevelop ? Dans Windev ?

Merci de votre aide.

--------------------------------------------------------------------------
Erreur quand on appelle nRes1 = MultiplyClass::Multiply(n1, n2) :

Erreur à la ligne 33 du traitement Clic sur BTN_SansNom2.
L'objet <MultiplyClass> est inconnu dans l'assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll>.
Vérifier que la version de l'assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll> utilisée en exécution est la même que la version utilisée pour la compilation du projet.
L'objet de type <UtilityMethods.MultiplyClass> (assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll>) n'a pas pu être créé
L'assemblage <R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
System.IO.FileLoadException: Could not load file or assembly 'file:///R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/… for more information.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at CDotNetLoader.vpiLoadAssembly(CDotNetLoader* , SByte* pszFileName, CXError* pclErreur)


L'assemblage <WebServiceSharePoint> n'a pas pu être ouvert

----- Informations techniques -----

Projet : GCOLL2

Appel WL :
Traitement de 'Clic sur BTN_SansNom2' (FEN_Test_Soap.BTN_SansNom2), ligne 33, thread 0

Que s'est-il passé ?
L'objet <MultiplyClass> est inconnu dans l'assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll>.
Vérifier que la version de l'assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll> utilisée en exécution est la même que la version utilisée pour la compilation du projet.
L'objet de type <UtilityMethods.MultiplyClass> (assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll>) n'a pas pu être créé
L'assemblage <R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
System.IO.FileLoadException: Could not load file or assembly 'file:///R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/… for more information.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at CDotNetLoader.vpiLoadAssembly(CDotNetLoader* , SByte* pszFileName, CXError* pclErreur)


L'assemblage <WebServiceSharePoint> n'a pas pu être ouvert

Code erreur : 200007
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd160net4.dll' (16.0.14.0).
Identifiant des informations détaillées (.err) : 200007
Informations supplémentaires :
EIT_PILEWL :
Clic sur BTN_SansNom2 (FEN_Test_Soap.BTN_SansNom2), ligne 33
EIT_DATEHEURE : 21/07/2011 17:03:38

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

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

Code erreur : 200003
Niveau : erreur fatale (EL_FATAL)

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


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

Que s'est-il passé ?
L'assemblage <D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
System.IO.FileLoadException: Could not load file or assembly 'file:///D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///D:\krasnosa\Bureau\SharePoint\WebServiceSharePointDll\Projet\obj\x86\Debug\WebServiceSharePoint.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/… for more information.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at CDotNetLoader.vpiLoadAssemblyWithFullPath(CDotNetLoader* , SByte* pszFileName, CXError* pclErreur)



Code erreur : 200007
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd160net4.dll' (16.0.14.0).
Identifiant des informations détaillées (.err) : 200007


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

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

Code erreur : 200003
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd160net4.dll' (16.0.14.0).
Identifiant des informations détaillées (.err) : 200003
Membre enregistré
246 messages
Popularité : +1 (1 vote)
Posté le 22 juillet 2011 - 10:04
Bonjour,

Test en mettant la DLL dans le répertoire exe de ton projet.
A+
Vince
http://www.syscode.fr
http://www.ennovsys.com
Posté le 22 juillet 2011 - 11:00
Alex a exposé le 21/07/2011 :
Bonjour,

On doit piloter un webservice Sharepoint : mettre à jour des listes.
Le prestataire nous a fourni un exemple en C# qui fonctionne.
Coté Windev on importe le webservice mais impossible de l'utiliser.


Une idée en passant :
recopie ton assemblage en local et réimporte le
Membre enregistré
203 messages
Popularité : +3 (3 votes)
Posté le 22 juillet 2011 - 12:30
Bonjour,

Merci pour les réponses,

En fait quand on passe par le menu Windev : Importer un assemblage .NET,
le fichier DLL est automatiquement copié dans le dossier EXE :
Exe\WebServiceSharePoint.dll

Ce qui est curieux c'est que les classes apparaissent bien dans l'explorateur de projet (sous le neud Assemblages .NET > WebServiceSharePoint) : donc l'import s'est bien passé, on peut dérouler les classes et méthodes comme pour une classe .NET classique.

Quand on écrit : nRes1 = MultiplyClass::Multiply(n1, n2)
Windev reconnait les méthodes et fait bien la complétion automatique (comme pour les classes Windev classiques). Il n'y a pas d'erreur de compilation : le code est correct.

Se peut-il qu'on ai oublié quelque chose dans SharpDevelop au moment de compiler la DLL ? (on débute en C#)

File name: 'file:///R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/… for more information.

Concernant cet emplacement : R:\...\Exe\WebServiceSharePoint.dll
(c'est bien le dossier EXE du projet Windev)

Quelqu'un qui pourrait il nous fournir un petit exemple de projet C# qui génère une DLL compatible avec Windev ? On se dit que on a peut être fait un mauvais réglage coté C# / SharpDevelop ?

Email pour envoi de fichier : alexeyk arobase hotmail point fr.

Merci beaucoup de faire les éssais avec nous,
ça pourra peut-être aider d'autres personnes.

On peut aussi vous envoyer le petit projet de DLL C# qu'on a fait à partir de ce code : http://msdn.microsoft.com/fr-fr/library/3707x96z%28v=vs.80%29.aspx…

Cordialement,

Alexey K.
Membre enregistré
2 messages
Posté le 22 juillet 2011 - 15:17
Bonjour,
Ne serait-ce pas un problème de sécurité windows en rapport avec l'emplacement à partir duquel est chargé/exécuter l'assemblage .NET ?

Quelle version du framework .NET est installée ?
Le lecteur R: est-il un lecteur réseau ?

David
Membre enregistré
203 messages
Popularité : +3 (3 votes)
Posté le 22 juillet 2011 - 17:54
Bonjour,

Oui R: est un partage réseau :
tous les projets sont sur des partages réseau ici.

On a compilé la dll en .NET 4.0,
sur le poste il y a toutes les versions.

Alexey
Membre enregistré
2 messages
Posté le 23 juillet 2011 - 15:58
Je pense que le problème peut se situer dans les paramètres de sécutités de l'installation.
En effet le Framework Net 4 à introduit des modifications importantes dans l'attribution des droits d'exécution des DLL .Net.
WinDev doit utiliser la copie locale qu'il a réalisé lors de l'import pour tout ce qui touche à l'autocomplétion, mais lors de l'exécution il à recours à la version sur le réseau. Les droits d'accès peuvent donc être différents, d'où l'exception.

Le problème pourrait venir de ce que le .Net Framework attribue moins de privilèges à un élément téléchargé (ici depuis le lecteur réseau R:) qu'à un élément local.
Il faut essayer l'utilitaire caspol fourni avec le SDK Windows 7 pour paramétrer la sécurité des applications.
Membre enregistré
203 messages
Popularité : +3 (3 votes)
Posté le 25 juillet 2011 - 10:41
Merci pour les informations,

On va faire des éssais.

Cordialement,

Alex
Membre enregistré
203 messages
Popularité : +3 (3 votes)
Posté le 25 juillet 2011 - 19:53
Bonjour,

Après quelques recherches on a trouvé. Une DLL perso doit être installée sur le poste avec l'utilitaire gacutil fourni dans le SDK Microsoft :
http://msdn.microsoft.com/fr-fr/library/ex0ss12c%28v=vs.80%29.aspx

Dans notre cas il se trouve ici (.NET 4) :
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe
(permet d'installer une DLL pour .NET 4.0)

Attention il y a une autre version ici (.NET 2) :
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe
(permet d'installer une DLL pour .NET 2.0)

Si vous voulez embarquer l'utilitaire avec votre EXE il faut copier les fichiers gacutil.exe et gacutil.exe.config.

Ensuite faire en ligne de commande dos ou avec LanceAppli :
gacutil.exe /h : pour l'aide
gacutil.exe /u nom_assembly : desinstalle la DLL
gacutil.exe /i chemin_de_ma_dll.dll : installe la DLL sur le poste

Dans mon cas :
-je compile ma DLL avec SharpDevelop ou Visual Studio -> WebServiceSharePoint.dll
-je l'importe dans mon projet Windev (Assemblages .NET > Utiliser un assemblage > Parcourir > je prends ma dll)
-la DLL importée se trouve copiée dans le dossier EXE du projet
-je copie l'utilitaire gacutil.exe (plus le fichier gacutil.exe.config) dans le dossier EXE
-je fais un lanceappli (gacutil.exe /i WebServiceSharePoint.dll) pour installer la dll
-j'appelle les méthodes de la dll

Pour désinstaller l'assembly :
R:\GESMANIF\OREX\GCOLL2\Exe\gacutil.exe /u WebServiceSharePoint

Pour installer l'assembly :
R:\GESMANIF\OREX\GCOLL2\Exe\gacutil.exe /i R:\GESMANIF\OREX\GCOLL2\Exe\WebServiceSharePoint.dll

Code Windev (appel des méthodes de la DLL) : (cette fois il n'y a pas d'erreur)
nRes1 = MultiplyClass::Multiply(n1, n2)
nRes2 = AddClass::Add(n1, n1)

Cordialement,

Alex