Text to Speech em ASP.NET - acesso negado ... o que fazer?
-
06-07-2019 - |
Pergunta
No meu site pessoal, eu gostaria de torná-lo "pronuncie" algo
Eu resolvi o problema "conceito", como em aqui , e no meu desktop funciona bem quando iniciado a partir de desenvolvedor web visual. Cria um arquivo e, em seguida, um player embutido na página irá jogar. Perfeito.
Então, eu fizer o upload no servidor ... Eu recebo este erro 500:
Erro no servidor '/ sapi' Aplicação. Acesso negado. (Exceção de HRESULT: 0x80070005 (E_ACCESSDENIED)) Descrição: Uma exceção sem tratamento ocorreu durante a execução do solicitação da web atual. Por favor, revise o Rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no o código.
Detalhes da exceção: System.UnauthorizedAccessException: Acesso negado. (Exceção de HRESULT: 0x80070005 (E_ACCESSDENIED))
ASP.NET não está autorizado a acessar o recurso solicitado. Considerar conceder direitos de acesso ao recurso a identidade de solicitação ASP.NET. ASP.NET tem uma identidade de processo base (Normalmente {MACHINE} \ ASPNET no IIS 5 ou Serviço de Rede no IIS 6), que é usada se o aplicativo não é personificando. Se o pedido for personificando via, a identidade será o usuário anônimo (tipicamente IUSR_MACHINENAME) ou o autenticado solicitação do usuário.
(...)
Fonte de erro:
Veja abaixo
Arquivo de Origem: c: \ mypath \ sapi \ myfile.aspx.cs Linha: 21
Stack Trace:
[UnauthorizedAccessException: acesso é negado. (Exceção de HRESULT: 0x80070005 (E_ACCESSDENIED))]
SpeechLib.SpVoiceClass.Speak (String Texto, SpeechVoiceSpeakFlags Flags) 0 prova.Button1_Click (objecto remetente, EventArgs e) em 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) 1565Informações sobre versão: Microsoft .NET Framework versão: 2.0.50727.3053; ASP.NET versão: 2.0.50727.3053
Esta é a fonte
Fonte de erro:
Linha 19: myfile.Open(@"C:\mypath\sapi\gen\hi.wav",SpeechStreamFileMode.SSFMCreateForWrite,false);
Linha 20: voice.AudioOutputStream = myfile;
Linha 21: voice.Speak("Hi",SpeechVoiceSpeakFlags.SVSFDefault);
Eu recebo erro na linha 21, Voice.speak
Isso provavelmente significa que o usuário trabalhador aspnet tem não alguma permissão direita ??p>
A pasta geração tem todas as permissões adequadas:. Um arquivo vazio é criado
Então, eu tenho que dar permissão de executar para alguns dll sistema?
Você sabe que dll? É não bin\Interop.SpeechLib.dll
, em um presente que o usuário aspnet tem controle total
Ps: i ter controle total sobre os (Windows) servidor (quer dizer, o acesso por RDC, não é uma hospedagem compartilhada)
Solução
Eu tenho que trabalhar, definindo o AppPool como trabalhar como "Sistema Local" e definindo no machine.config para trabalhar como conta SYSTEM
É claro que eu sinto isso como um problema de segurança, como eu estou hospedando meu site pessoal no servidor (pequena) empresa (empregados estejam expressamente autorizadas a fazê-lo, o proprietário da empresa)
Talvez esta não é uma boa solução?
eu definir esta definição apenas para este webapp, e eu não sou tão bom em codificação (por isso há muitos bugs no meu código, medidos em 100 WTFs / minuto (haha)
Outras dicas
Eu tive problemas semelhantes, depois de muitas dores de cabeça eu consegui resolver o problema comigo. Eu encontrei dois problemas sendo o primeiro o navegador, que encontrei para o meu propósito ie somente explorador iria trabalhar e não outros navegadores como o Mozilla. O segundo problema foi finalmente as permissões, mesmo que eu tinha todas as permissões corretamente eu descobri que eu tinha que remover a permissão de usuário de internet e verificar o log on como opção de conta local, que então trabalhava.