0

我有一个带有实体框架和 .NET Framework 4 的 ASP.NET MVC 4 w/ Razor 项目

在我的 chtml View 页面中,我有 2 个 BeginForms,一个是更新帐户设置,另一个是创建一个新的 TTS 语音文件(文本到语音)。第一个表单调用我的“Boxes”控制器方法,它工作得很好,它将更新的值分配到实体数据库中。

第二个 BeginForm 使用一个简单的文本框,我将在其中输入文本,它将指向我在名为“Boxes_TTS”的同一控制器中的第二个方法。

该方法可以正常调用,没有任何问题。我有我的 TTS 代码,它接收字符串并对其进行处理,然后将其保存到实体中。以下是我的 TTS Helper 类在保存文件时执行的步骤:

1)它获取文本字符串

2)它创建一个波流

3) 然后它将波形流传递给将其转换为 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 页面上有一个“忙碌”图标。一段时间后,忙碌图标停止,当我尝试导航到站点内的另一个页面时,它不起作用,给我空错误等。如果我删除 vm.submitTTS() 方法,返回视图工作正常美好的。

有什么建议么?

谢谢

由良

4

2 回答 2

0

如果该方法预计会返回一个“ActionResult”,那么我相信您需要返回一个 ViewResult。

于 2013-11-13T19:51:22.740 回答
0

看起来我必须创建一个新线程并放入 Microsoft 的 SpeechSynthesizer。使用 SpeechSynthesizer 创建新线程有助于视图在返回时呈现自身。异步问题?也许。但它似乎正在工作。

于 2013-11-14T17:57:23.303 回答