На моем личном веб-сайте я хотел бы сделать это "произнести" что-то
Я решил проблему "концепции", как в здесь, и на моем рабочем столе он работает плавно при запуске из визуального веб-разработчика. Создает файл, а затем встроенный проигрыватель на этой странице будет воспроизводить его. Совершенная.
Итак, я загрузил его на сервер... Я получаю эту ошибку 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 не является общедоступным хостингом)
Я получил его, установив AppPool как работающий как "Локальная система" и установив в machine.config работу в качестве учетной записи SYSTEM
Конечно, я чувствую это как проблему безопасности, поскольку я размещаю свой личный сайт на сервере (небольшой) компании (работники явно уполномочены сделать это владельцем компании)
Возможно, это нехорошее решение?
Я установил этот параметр только для этого webapp, и я не очень хорошо разбираюсь в кодировании (поэтому в моем коде есть много ошибок, измеренных в 100 WTFs/минута (haha)
У меня были подобные проблемы, после многих головных болей мне удалось решить проблему со мной. Я обнаружил две проблемы: первый из них был браузером, я нашел для себя только то, что будет работать исследователь, а не другие браузеры, такие как mozilla. Вторая проблема - это, наконец, разрешения, хотя у меня были все права правильно, я обнаружил, что мне нужно было удалить разрешение интернет-пользователя и проверить вход в систему как локальный вариант учетной записи, который затем работал.