2009-06-20 3 views
2

Sur mon site personnel, je voudrais faire « prononcer » quelque choseText to Speech dans ASP.NET - Accès refusé ... que faire?

je résolu le problème « concept », comme dans here, et sur mon bureau, il fonctionne sans problème lors du lancement de Visual Web Developer. Crée un fichier, puis un lecteur intégré dans la page va le lire. Parfait.

Alors, j'uploadé sur le serveur ... Je reçois cette erreur 500:

Server Error in '/sapi' Application. Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via , the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.

(...)

Source Error:

See it below

Source File: c:\mypath\sapi\myfile.aspx.cs Line: 21

Stack Trace:

[UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))]
SpeechLib.SpVoiceClass.Speak(String Text, SpeechVoiceSpeakFlags Flags) +0 prova.Button1_Click(Object sender, EventArgs e) in 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(String 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) +1565

Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053

Ceci est la source

Erreur Source:

Ligne 19: myfile.Open(@"C:\mypath\sapi\gen\hi.wav",SpeechStreamFileMode.SSFMCreateForWrite,false);
Ligne 20: voice.AudioOutputStream = myfile;
Ligne 21:voice.Speak("Hi",SpeechVoiceSpeakFlags.SVSFDefault);

J'obtiens l'erreur sur la ligne 21, Voice.speak

Cela signifie probablement que l'utilisateur des travailleurs aspnet n'a pas une permission droit

Le dossier de génération possède toutes les permissions: un fichier vide est créé .

Donc, je dois donner l'autorisation d'exécuter à une DLL système?

Savez-vous quelle DLL? Il est pasbin\Interop.SpeechLib.dll, sur celui-ci l'utilisateur aspnet a le plein contrôle

Ps: j'ai le plein contrôle sur les (fenêtres) serveur (je veux dire, l'accès RDC, n'est pas un hébergement mutualisé)

+0

Je pense que vous devriez envisager la possibilité que le problème _is _ l'accès au fichier. Je ne l'exclurais pas, étant donné que l'accès réel au fichier est en cours d'exécution par un morceau de code COM, peut-être à court de processus? –

+0

si je refuse les autorisations d'écriture sur le dossier de sortie, j'obtiens une autre exception: System.Runtime.InteropServices.COMException: n'a pas pu être trouvé.(Exception de HRESULT: 0x80030002 (STG_E_FILENOTFOUND)), c'est pourquoi je pense que les problèmes sont que l'utilisateur aspnet n'a pas la bonne mission pour exécuter la voix sapi ... –

+0

aussi, le wav est créé, et il contient le wav en-tête: RIFF & _____ WAVEfmt____data mais pas le flux de fichier, donc il ressemble à la DLL pour le faire "remplir", est bloqué? –

Répondre

2

Je l'ai fait fonctionner en configurant l'AppPool comme fonctionnant en tant que "Système local" et en définissant dans le fichier machine.config pour fonctionner en tant que compte SYSTEM

Bien sûr, je pense que c'est un problème de sécurité, car j'héberge mon site personnel sur le (petit) serveur de l'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 définir ce paramètre uniquement pour ce webapp, et je ne suis pas si bon codage (donc il y a beaucoup de bugs dans mon code, mesuré en 100 WTFs/minute (haha)

+1

une supposition pourquoi cela a fonctionné? Autorisations COM? –

+0

Je pense que parce que l'utilisateur ASPNET par défaut a des privilèges "invité", (si j'ai raison), donc ** peut-être **, l'exécuter comme système local, permettra d'exécuter les fichiers système –

+0

Pouvez-vous expliquer comment vous avez fait cela? J'ai exactement le même problème que je suis incapable de résoudre. J'ai mis le AppPool pour fonctionner comme "Système local" et cela n'a pas aidé – DotnetDude

1

J'ai eu des problèmes similaires, après de nombreux J'ai trouvé deux problèmes, le premier étant le navigateur, je l'ai trouvé pour mon seul but, c'est-à-dire que l'explorateur fonctionnerait et non pas d'autres navigateurs comme mozilla Le deuxième problème était finalement les permissions, même si je avait toutes les permissions correctement, j'ai trouvé que je devais supprimer l'autorisation de l'utilisateur Internet et vérifier l'ouverture de session comme option de compte local qui a ensuite travaillé

Questions connexes