Text to Speech dans ASP.NET - L'accès est refusé & # 8230; Que faire?
-
06-07-2019 - |
Question
Sur mon site Web personnel, j'aimerais le faire "prononcer". quelque chose
J'ai résolu le "concept". problème, comme dans ici , et sur mon bureau, tout se passe bien à partir du lancement développeur web visuel. Crée un fichier, puis un lecteur intégré dans la page le lira. Parfait.
Alors, je l'ai téléchargé sur le serveur ... J'ai l'erreur 500:
Erreur de serveur dans l'application '/ sapi'. L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) Description: une exception non gérée eu lieu pendant l'exécution du demande web en cours. S'il vous plaît examiner le trace de pile pour plus d'informations sur l'erreur et où il est originaire le code.
Détails de l'exception: System.UnauthorizedAccessException: L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))
ASP.NET n'est pas autorisé à accéder la ressource demandée. Considérer octroi de droits d'accès à la ressource à l'identité de la demande ASP.NET. ASP.NET a une identité de processus de base (typiquement {MACHINE} \ ASPNET sur IIS 5 ou Service réseau sur IIS 6) qui est utilisé si l'application n'est pas personnification. Si l'application est personnification via, l'identité sera l'utilisateur anonyme (généralement IUSR_MACHINENAME) ou le authentifié demander à l'utilisateur.
(...)
Erreur source:
Voir ci-dessous
Fichier source: c: \ mypath \ sapi \ myfile.aspx.cs Ligne: 21
Trace de pile:
[UnauthorizedAccessException: Access est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))]
SpeechLib.SpVoiceClass.Speak (String Texte, SpeechVoiceSpeakFlags Drapeaux) +0 prova.Button1_Click (Expéditeur d'objet, EventArgs e) dans c: \ mypath \ sapi \ prova.aspx.cs: 21 System.Web.UI.WebControls.Button.OnClick (EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (Chaîne eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565Informations de version: Microsoft .NET Version du framework: 2.0.50727.3053; Version ASP.NET: 2.0.50727.3053
Ceci est la source
Erreur source:
Ligne 19: monfichier.Open (@ "C: \ mypath \ sapi \ gen \ hi.wav", SpeechStreamFileMode.SSFMCreateForWrite, false);
;
Ligne 20: voice.AudioOutputStream = myfile;
Ligne 21: voice.Speak ("Bonjour", SpeechVoiceSpeakFlags.SVSFDefault);
Je reçois une erreur sur la ligne 21, Voice.speak
Cela signifie probablement que l'utilisateur qui travaille sur aspnet n'a pas de permission d'accès
Le dossier de génération dispose de toutes les autorisations voulues: un fichier vide est créé.
Donc, je dois donner la permission d’exécuter à une dll système?
Savez-vous quelle dll? Ce n'est pas bin \ Interop.SpeechLib.dll
, sur celui-ci l'utilisateur aspnet a le contrôle total
Ps: j'ai le contrôle total sur le serveur (Windows) (je veux dire, accès par RDC, ce n'est pas un hébergement partagé)
La solution
Je l'ai obtenu en définissant l'AppPool comme "Système local". et en définissant dans le fichier machine.config le statut de compte système
Bien sûr, j’estime que, pour des raisons de sécurité, j’héberge mon site Web personnel sur le serveur de la (petite) entreprise (les employés sont expressément autorisés à le faire par le propriétaire de l’entreprise)
Peut-être que ce n'est pas une bonne solution?
Je règle ce paramètre uniquement pour cette application Web et je ne suis pas très doué pour le codage (il y a donc beaucoup de bogues dans mon code, mesurés de manière 100 WTF / minute (haha)
Autres conseils
J'ai eu des problèmes similaires, après de nombreux maux de tête, j'ai réussi à résoudre le problème avec moi. J'ai trouvé deux problèmes, le premier étant le navigateur, je n'ai trouvé que mon objectif, c'est-à-dire que l'explorateur fonctionnerait et pas d'autres navigateurs tels que Mozilla. Le deuxième problème était finalement les autorisations, même si j’avais toutes les autorisations correctement, j’ai trouvé qu’il me fallait supprimer l’autorisation d’utilisateur Internet et vérifier l’ouverture de session en tant qu’option de compte local qui a ensuite fonctionné.