ASP.NET中的SpeechSynthesizer - 异步错误

时间:2011-10-06 12:53:07

标签: .net asp.net asynchronous text-to-speech speechsynthesizer

我希望能够通过调用speak.aspx?text=Hello%20world在我的ASP.NET应用程序中生成语音。这将以.wav格式给出回复。

到目前为止,我的页面背后有一个空白页面:

protected void Page_PreRender(object sender, EventArgs e)
{
  using (var ss = new SpeechSynthesizer()) {
    MemoryStream str = new MemoryStream();
    ss.SetOutputToWaveStream(str);
    ss.Speak(Server.UrlDecode(Request.QueryString["text"]));
    Response.AddHeader("Content-Type", "audio/wav");
    str.WriteTo(Response.OutputStream);
    str.Close();
  }
}

然而,这失败并显示消息:

  

InvalidOperationException :在此上下文中不允许异步操作。启动异步操作的页面必须将Async属性设置为true,并且只能在PreRenderComplete事件之前的页面上启动异步操作。

如果我将Async="true"添加到@Page指令,则代码会运行,但页面请求会无限期挂起。请问您能告诉我什么是错的,并显示正确的代码/方法吗?

注意我不能只使用Google文字转语音API,因为它只允许100个字符或更少的字符串。

谢谢。

1 个答案:

答案 0 :(得分:0)

您应该将上面的代码移到page_load方法中。在预呈现中做你正在做的事情没有真正的理由。

如果您使页面异步,则需要更改编程风格。看看这是否有帮助:

Example of Asynchronous page processing in ASP.net webforms (.NET 2.0)