none
SpeechSynthesizer can't using in web RRS feed

  • 问题

  • i test SpeechSynthesizer in asp .net mvc

    and i find some question。

    the code

    Public Class HomeController
        Inherits Controller

        Async Function Index() As Task(Of ActionResult)
            Return View(Await getwav())
        End Function

        Private Async Function getwav() As Threading.Tasks.Task(Of Boolean)
            Return Await Task.Run(Function()
                                      Dim sy As New SpeechSynthesizer
                                      sy.SetOutputToWaveFile("d:\test\test.wav")
                                      sy.Speak("It is a test")
                                      sy.Dispose()
                                      Return True
                                  End Function)
        End Function
    End Class

    it's can run sucess in Visual Studio 

    but i publish it on my server,it got the error

    [NullReferenceException: 未将对象引用设置到对象的实例。] System.Speech.Internal.ObjectTokens.SAPICategories.DefaultDeviceOut() +83 System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speechSynthesizer) +1140 System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer() +90 System.Speech.Synthesis.SpeechSynthesizer.SetOutputToNull() +48 System.Speech.Synthesis.SpeechSynthesizer.SetOutputToWaveFile(String path) +38 WebApplication1._Closure$__._Lambda$__2-0() in F:\Program Files\2017\SpeechToText\WebApplication1\Controllers\HomeController.vb:14 System.Threading.Tasks.Task`1.InnerInvoke() +35 System.Threading.Tasks.Task.Execute() +69 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +31 WebApplication1.VB$StateMachine_2_getwav.MoveNext() in F:\Program Files\2017\SpeechToText\WebApplication1\Controllers\HomeController.vb:12 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +31 WebApplication1.VB$StateMachine_1_Index.MoveNext() in F:\Program Files\2017\SpeechToText\WebApplication1\Controllers\HomeController.vb:8 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62 System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +92 System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +22 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42 System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72 System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +385 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42 System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38 System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38 System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38 System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +177

    how can i solve it。

    ps:it can success run in client on my server,and error in web on my server

    2017年8月31日 1:56

答案

  • 你好,

    根据你的描述,导致你问题的原因很有可能是权限相关的问题。在调用SpeechSynthesizer的时候,进程可能需要对应的权限来调用系统的一些资源。当权限不足的时候,会导致错误。

    你可以尝试修改IIS的Application Pool Identity, 使用Local System 或者 你的服务器的管理员账号作为Application Pool Identity。

    关于IIS Application Pool Identity的相关信息,你可以参考下面的链接:

    http://www.cnblogs.com/jfzhu/p/4067297.html

    • 已标记为答案 SilenceIce 2017年9月5日 7:37
    2017年9月1日 8:07

全部回复

  • 你好,

    根据你的描述,导致你问题的原因很有可能是权限相关的问题。在调用SpeechSynthesizer的时候,进程可能需要对应的权限来调用系统的一些资源。当权限不足的时候,会导致错误。

    你可以尝试修改IIS的Application Pool Identity, 使用Local System 或者 你的服务器的管理员账号作为Application Pool Identity。

    关于IIS Application Pool Identity的相关信息,你可以参考下面的链接:

    http://www.cnblogs.com/jfzhu/p/4067297.html

    • 已标记为答案 SilenceIce 2017年9月5日 7:37
    2017年9月1日 8:07
  • 你好,非常感谢完美解决我了问题,已经成功运行。

    2017年9月5日 7:38