2

を呼び出して、ASP.NET アプリで音声を生成できるようにしたいと考えていますspeak.aspx?text=Hello%20world。これにより、形式で応答が得られ.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 文字以下の文字列しか使用できないため、この API だけを使用することはできません。

ありがとうございました。

4

1 に答える 1

0

おそらく、上記のコードを page_load メソッドに移動する必要があります。prerender で行っていることを実行する本当の理由はありません。

ページを非同期にする場合は、プログラミング スタイルを変更する必要があります。これが役立つかどうかを確認してください:

ASP.net Web フォーム (.NET 2.0) での非同期ページ処理の例

于 2011-10-06T14:09:24.930 に答える