2017-06-01 2 views
0

J'ai créé un Azure Web en C# qui fait référence à une bibliothèque dynamique C++ native. Sur l'application hôte local fonctionne bien. Mais lorsque j'ai déployé l'application Web sur Cloud Azure, cela ne fonctionne pas. Ne pas savoir comment aller de l'avant. aidez s'il vous plaît.azure webapp avec C++ dll ne fonctionnant pas

Lors de l'appel de l'API de réinitialisation, le message suivant s'affiche: "Une erreur s'est produite".

+0

Vous devez d'abord vérifier si la DLL et d'autres dépendances possibles peuvent être trouvées. – Simon

+0

Vérifiez également que la résolution de la DLL correspond à celle de votre application Web (32 bits par 64 bits). –

Répondre

0

Lors de l'appel de l'API de réinitialisation, le message suivant s'affiche: "Une erreur s'est produite".

Pour obtenir les informations d'erreur de détail de l'API ASP.NET REST, nous devons définir la valeur de la propriété IncludeErrorDetailPolicy comme « toujours » dans WebApiConfig.cs.

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

Si l'exception que vous avez été après modifié le IncludeErrorDetailPolicy est DllNotFoundException, s'il vous plaît assurez-vous que la DLL native est déployée avec succès dans le dossier bin Web App Azure. Par défaut, le fichier DLL natif ne sera pas déployé avec votre publication VS. Vous devez télécharger ce fichier dans le dossier bin de votre application Web en utilisant le site FTP ou Kudu. Si l'exception que vous avez après avoir modifié IncludeErrorDetailPolicy est BadImageFormatException, vous devez vérifier la plate-forme de votre application Web et de votre DLL native.

enter image description here

Si la plate-forme de votre Web App est de 32 bits, s'il vous plaît assurez-vous que la DLL native a été la cible de build Win32 ou toutes les plateformes. Si vous construisez la DLL sur une machine 64 bits. Toutes les plates-formes sont requises.

enter image description here

En outre, Azure Web App exécuter dans un environnement sécurisé appelé un bac à sable. Le sandbox vise généralement à restreindre l'accès aux composants partagés de Windows. Pour des informations détaillées, le lien ci-dessous est pour votre référence.

General Azure Web App Sandbox Restrictions

Si votre utilisation de DLL native une des API restreintes. L'appel à votre DLL native échouera également. Pour voir tous les modules dépendants de votre DLL native, vous pouvez télécharger et utiliser Dependency Walker.

+0

Merci d'avoir répondu. Le message d'erreur que je vois est System.DllNotFoundException Cette exception est levée, même si j'ai le dll correct dans le dossier bin (/ site/wwwroot/bin) – Mahendra971

+0

Quelle plateforme avez-vous choisir sur votre application Web? 32bit ou 64bit? Je rencontre également la DllNotFoundException lorsque je déploie ma DLL C++ dans une application Web 32 bits. Enfin, je l'ai résolu en reconstruisant la DLL C++ et en choisissant 'Win32' comme plate-forme. – Amor

+0

J'ai créé l'application Web pour la plate-forme 64 bits et compiler la DLL C++ 64 bits (configuration de la version). Cela a résolu le problème. 1. Générer une bibliothèque C++ en utilisant la configuration 64 bits en mode relase. Construire -> Gestionnaire de configuration Sélectionnez ---> Reslease, la plate-forme x64 2. Générer l'application Web en utilisant la configuration 64 bits en mode débogage Construire -> Gestionnaire de configuration Sélectionnez ---> Debug, Plate-forme x64 3. Exécutez l'application Web dans Azure en configuration 64 bits. Paramètres d'application -> 64 bits Merci @ Amor-MSFT pour avoir fourni la solution. – Mahendra971