Текст в речь в ASP.NET - доступ запрещен ... что делать?

2

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

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

Итак, я загрузил его на сервер... Я получаю эту ошибку 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 Текст, SpeechVoiceSpeakFlags Флаги) +0 prova.Button1_Click (отправитель объекта, EventArgs e) в 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

Информация о версии: 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 не является общедоступным хостингом)

  • 0
    Я думаю, вы должны рассмотреть возможность того, что проблема заключается в доступе к файлам. Я бы не стал исключать это, учитывая, что фактический доступ к файлам выполняется с помощью кода COM, возможно, из-за отсутствия процесса?
  • 0
    если я отрицаю права на запись в выходной папке, я получаю еще одно исключение: System.Runtime.InteropServices.COMException: не может быть найдено. (Исключение из HRESULT: 0x80030002 (STG_E_FILENOTFOUND)), поэтому я считаю, что проблема в том, что у пользователя aspnet нет прав для запуска голоса сапи ...
Показать ещё 2 комментария
Теги:
text-to-speech
windows-server-2003

2 ответа

2
Лучший ответ

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

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

Возможно, это нехорошее решение?

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

  • 1
    У кого-нибудь есть догадки, почему это сработало? COM разрешения?
  • 0
    Я думаю, потому что пользователь ASPNET по умолчанию имеет привилегии «гостя» (если я прав), поэтому, возможно , запуск его как локальной системы позволит запустить системные файлы
Показать ещё 2 комментария
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню