Текст в речь в ASP.NET - доступ запрещен ... что делать? - PullRequest
3 голосов
/ 20 июня 2009

На моем личном веб-сайте я бы хотел, чтобы он "произнес" что-то

Я решил проблему с «концепцией», как в здесь , и на моем рабочем столе он работает плавно при запуске из визуального веб-разработчика. Создает файл, а затем встроенный проигрыватель на странице будет воспроизводить его. Совершенная.

Итак, я загрузил его на сервер ... Я получаю эту ошибку 500:

Ошибка сервера в приложении '/ sapi'. В доступе отказано. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) Описание: необработанное исключение произошло во время исполнения текущий веб-запрос. Пожалуйста, просмотрите трассировка стека для получения дополнительной информации о ошибка и откуда она возникла код.

Сведения об исключении: System.UnauthorizedAccessException: В доступе отказано. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

ASP.NET не авторизован для доступа запрашиваемый ресурс. Рассматривать предоставление прав доступа к ресурсу к идентичности запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET на IIS 5 или сетевой службы на IIS 6), то есть используется, если приложение не имитированы. Если приложение выдавая себя за себя, личность будет анонимным пользователем (обычно IUSR_MACHINENAME) или заверенный запрос пользователя.

(...)

Ошибка источника:

см. Ниже

Исходный файл: C: \ mypath \ SAPI \ myfile.aspx.cs Линия: 21

Трассировка стека:

[UnauthorizedAccessException: доступ отказано. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))]
SpeechLib.SpVoiceClass.Speak (String Text, SpeechVoiceSpeakFlags Flags) +0 prova.Button1_Click (Отправитель объекта, EventArgs e) в C: \ mypath \ SAPI \ prova.aspx.cs: 21 System.Web.UI.WebControls.Button.OnClick (EventArgs д) + 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

Информация о версии: Microsoft .NET Версия Framework: 2.0.50727.3053; ASP.NET версия: 2.0.50727.3053

Это источник

Ошибка источника:

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

Я получаю сообщение об ошибке в строке 21, Voice.speak

Это, вероятно, означает, что рабочий пользователь aspnet не имеет каких-либо прав доступа

Папка создания имеет все необходимые разрешения: создан пустой файл.

Итак, я должен дать разрешение на выполнение некоторой системной DLL?

Вы знаете, какая dll? Это не bin\Interop.SpeechLib.dll, в этом случае пользователь aspnet имеет полный контроль

PS: у меня есть полный контроль над сервером (windows) (я имею в виду, доступ по RDC, это не общий хостинг)

Ответы [ 2 ]

2 голосов
/ 21 июня 2009

Я заработал, настроив AppPool как «Локальная система» и установив в machine.config учетную запись SYSTEM

Конечно, я чувствую это как проблему безопасности, так как я размещаю свой личный веб-сайт на сервере (небольшой) компании (сотрудники прямо уполномочены на это владельцем компании)

Может быть, это не очень хорошее решение?

Я установил этот параметр только для этого веб-приложения, и я не очень хорош в кодировании (поэтому в моем коде много ошибок, измеряемых в 100 WTFs / мин. (хаха)

1 голос
/ 17 января 2011

У меня были подобные проблемы, после многих головных болей мне удалось решить проблему со мной. Я обнаружил две проблемы, первая из которых связана с браузером, я нашел только для своих целей, т.е. будет работать explorer, а не другие браузеры, такие как Mozilla. Вторая проблема, наконец, заключалась в разрешениях, хотя у меня были все разрешения правильно, я обнаружил, что должен был удалить разрешение интернет-пользователя и проверить вход в систему как локальную учетную запись, что затем сработало.

...