【问题标题】:Text to Speech in ASP.NET - Access is denied... what to do?ASP.NET 中的文本转语音 - 访问被拒绝...怎么办?
【发布时间】:2009-06-20 19:31:04
【问题描述】:

在我的个人网站上,我想让它“发音”一些东西

我解决了“概念”问题,就像在here 中一样,并且在我的桌面上,当从视觉 Web 开发人员启动时,它可以顺利运行。创建一个文件,然后页面中的嵌入式播放器将播放它。完美。

所以,我将它上传到服务器上...我收到此错误 500:

“/sapi”应用程序中的服务器错误。 访问被拒绝。 (例外来自 HRESULT: 0x80070005 (E_ACCESSDENIED)) 描述:未处理的异常 在执行过程中发生 当前的网络请求。请查看 堆栈跟踪以获取有关的更多信息 错误及其起源 代码。

异常详情: System.UnauthorizedAccessException: 访问被拒绝。 (例外来自 HRESULT: 0x80070005 (E_ACCESSDENIED))

ASP.NET 无权访问 请求的资源。考虑 授予对资源的访问权限 到 ASP.NET 请求标识。 ASP.NET 有一个基本进程标识 (通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 上的网络服务),即 如果应用程序不是,则使用 冒充。如果应用程序是 冒充身份 将是匿名用户(通常 IUSR_MACHINENAME) 或经过身份验证的 请求用户。

(...)

来源错误:

请看下面

源文件: c:\mypath\sapi\myfile.aspx.cs 线路:21

堆栈跟踪:

[未授权访问异常:访问 被拒绝。 (HRESULT 的例外情况: 0x80070005 (E_ACCESSDENIED))]
SpeechLib.SpVoiceClass.Speak(字符串 文本、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(字符串 事件参数)+110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler 源控件,字符串事件参数) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint) +1565

版本信息:Microsoft .NET 框架版本: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 worker 用户没有一些正确的权限

生成文件夹具有所有正确的权限:创建一个空文件。

所以,我必须授予某些系统 dll 的执行权限?

你知道哪个dll吗? 不是bin\Interop.SpeechLib.dll,对此aspnet 用户拥有完全控制权

Ps:我可以完全控制(Windows)服务器(我的意思是,通过 RDC 访问,不是共享主机)

【问题讨论】:

  • 我认为您应该考虑问题文件访问的可能性。我不会排除它,因为实际的文件访问是由一段 COM 代码执行的,可能会耗尽进程?
  • 如果我拒绝对输出文件夹的写入权限,我会得到另一个异常:System.Runtime.InteropServices.COMException:找不到。 (HRESULT 的异常:0x80030002 (STG_E_FILENOTFOUND)),所以我认为问题在于 aspnet 用户没有正确的权限来运行 sapi 语音...
  • 另外,wav 被创建了,它包含 wav 头:RIFF&_____WAVEfmt____data 但不包含文件流,所以看起来像是让它“填充”的 dll 被阻止了?

标签: c# asp.net windows-server-2003 text-to-speech


【解决方案1】:

我通过将 AppPool 设置为“本地系统”并在 machine.config 中设置为 SYSTEM 帐户来使其工作

当然,我认为这是一个安全问题,因为我在(小型)公司服务器上托管我的个人网站(公司所有者明确授权员工这样做)

也许这不是一个好的解决方案?

我只为这个webapp设置了这个设置,而且我不太擅长编码(所以我的代码中有很多错误,以100 WTFs/minute衡量(哈哈)

【讨论】:

  • 我认为因为默认的 ASPNET 用户具有“来宾”权限,(如果我是对的),所以 也许,将其作为本地系统运行,将允许运行系统文件
  • 你能解释一下你是怎么做到的吗?我有完全相同的问题,我无法解决。我确实将 AppPool 设置为“本地系统”运行,但没有帮助
  • 好吧,我不确定我做了什么,我是个菜鸟。我认为 bin\Interop.SpeechLib.dll 必须具有工作进程用户的正确权限
【解决方案2】:

我也遇到过类似的问题,经过多次头痛后,我确实设法解决了我的问题。我发现了两个问题,第一个是浏览器,我发现仅出于我的目的,即资源管理器可以工作,而不是其他浏览器,例如 mozilla。第二个问题最后是权限,即使我拥有正确的所有权限,我发现我必须删除互联网用户权限并检查作为本地帐户登录的选项,然后该选项才起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多