0

Entity Framework と .NET Framework 4 を使用した Razor プロジェクトを使用した ASP.NET MVC 4 があります。

私の chtml ビュー ページには、2 つの BeginForms があります。1 つはアカウント設定を更新するためのもので、もう 1 つは新しい TTS 音声ファイル (テキスト読み上げ) を作成するためのものです。最初のフォームは "Boxes" コントローラー メソッドを呼び出し、完全に正常に動作し、更新された値をエンティティ データベースに割り当てます。

2 番目の BeginForm は、単純なテキスト ボックスを使用してテキストを入力し、同じコントローラー内の "Boxes_TTS" という 2 番目のメソッドに転送します。

メソッドは問題なく正常に呼び出されます。文字列を取得して処理し、エンティティに保存する TTS コードがあります。ファイルを保存するときに TTS Helper クラスが実行する手順は次のとおりです。

1)テキストの文字列を取得します

2) 波の流れを作る

3) 次に、wave ストリームを VOX ファイル (別の種類の音声ファイル) に変換するメソッドに渡します。この方法では、wav ファイルをディスクに書き込み、それを読み取って vox に変換し、再度メモリに読み取ります。

4) ファイルが vox に変換されてメモリに読み込まれると、メソッドは blob を EF 内のテーブルに書き込みます。

5) 次に、一時ディレクトリから wav ファイルと vox ファイルの両方を削除します。

テキストが大きく、TTS エンジンが同時に複数のプロセスを実行する必要がある場合にメモリを占有しないようにすることが目的であるため、この変換を完全にメモリ内で行うことはできません。

私のコントローラーでは、これは TTS ヘルパー メソッドを呼び出すメソッドのコードです。

 [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Boxes_TTS(BulletinBoardBoxesViewModel vm)
    {
        SetHttpContext(this.HttpContext);
        if (!IsIPAllowed)
            return new RedirectResult(@"~/Home/NotNow", true);

        var id = Session["RecordID"];
        if (id == null)
            return new RedirectResult(@"~/Home/Index", true);


        int? BoxID = (int?)Session["SelectedBBBoxID"];

        if (BoxID == 0)
            BoxID = null;

        vm.submitTTS((int)Session["RecordID"], (int)Session["CompanyID"], BoxID);

        ViewBag.SubmittedData = "Your TTS message has been made active.";

        return View("Boxes",vm);
    }

コードをステップ実行し、View("Boxes",vm); を返しました。行が実行されていますが、ビュー ボックスに移動することはありません。代わりに、MVC サイトが停止し、Internet Explorer ページに「ビジー」アイコンが表示されました。しばらくすると、ビジー アイコンが停止し、サイト内の別のページに移動しようとすると、機能せず、null エラーが発生するなどです。vm.submitTTS() メソッドを削除すると、返されるビューは完全に機能します大丈夫。

助言がありますか?

ありがとう

ゆら

4

2 に答える 2

0

メソッドが「ActionResult」を返すと予想される場合は、ViewResult を返す必要があると思います。

于 2013-11-13T19:51:22.740 に答える
0

新しいスレッドを作成して Microsoft の SpeechSynthesizer を配置する必要があったようです。SpeechSynthesizer を使用して新しいスレッドを作成すると、ビューが返されたときにそれ自体をレンダリングするのに役立ちます。非同期の問題?多分。しかし、それは機能しているようです。

于 2013-11-14T17:57:23.303 に答える