分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

asp.net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑

发布时间:2023-09-06 02:02责任编辑:林大明关键词:暂无标签

首先需要引入命名空间System.Speech.Synthesis,代码如下:

using (var speechSyn = new SpeechSynthesizer()){ ???speechSyn.Volume = 60;//语速 ???speechSyn.Rate = -2;//音量 ???speechSyn.SetOutputToDefaultAudioDevice(); ???speechSyn.SetOutputToWaveFile(fullFileName);//"D:\\Record.wav" ???speechSyn.Speak(message);}

这段代码在winform  exe执行没有问题,但部署到iis上就会报异常:

  现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始。如果此异常在执行 Page 时发生,请确保 Page 标记为 <%@ Page Async=\"true\" %>。此异常也可能表明试图调用“异步无效”方法,在 ASP.NET 请求处理内一般不支持这种方法。相反,该异步方法应该返回一个任务,而调用方应该等待该任务。

接下来对代码进行改进:

try{ ???var task = Task.Run(() => ???{ ???????using (var speechSyn = new SpeechSynthesizer()) ???????{ ???????????speechSyn.Volume = 60;//语速 ???????????speechSyn.Rate = -2;//音量 ???????????speechSyn.SetOutputToDefaultAudioDevice(); ???????????speechSyn.SetOutputToWaveFile(fullFileName);//"D:\\Record.wav" ???????????speechSyn.Speak(message); ???????} ???}); ???Task.WaitAll(task);}catch (AggregateException ae){ ???var sb = new StringBuilder(); ???foreach (var item in ae.InnerExceptions) ???{ ???????var t = item.GetType(); ???????sb.AppendLine(t.Namespace + "." + t.Name + " " + item.Message); ???} ???System.IO.File.AppendAllText(Server.MapPath("~/a.txt"), sb.ToString());}

发现能正常生成音频文件,但是文件为0kb,文件异常信息为:

  System.InvalidOperationException 系统上未安装语音,或没有当前安全设置可用的语音。

接下来排查各种原因:

1.文件夹权限问题,添加各种用户权限仍然无效。

2.声卡问题,但发现winform程序可以生成语音文件。

3.iis线程释放问题,因为是异步操作,让当前线程休眠n秒任然不行。

是权限问题:

 把应用程序池的进程标识改成LocalSystem,能正常生成语音文件了。

asp.net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑

原文地址:https://www.cnblogs.com/duwolfcn/p/9267649.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved