2

我正在使用 ASP.NET 为 MATLAB 函数开发 Web 用户界面。我已经开始研究演示并遇到了这样的问题。

我使用来自 MATLAB 2010a、目标框架 - 3.5 的 deploytool 创建了一个 MyComponent.dll 程序集。该组件有一个函数 GetKnot(),它返回一个图形。

function df = getKnot()
    f = figure('Visible', 'off');
    knot;
    df = webfigure(f);
    close(f);
end

然后我在visual studio 2008 sp1中做了一个简单的webapp,只有一页Default.aspx。我添加了对 MWArray.dll、WebFiguresService.dll 和 MyComponent.dll 的引用。后面的代码是:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MyComponent;
using MathWorks.MATLAB.NET.WebFigures;

namespace MATLAB_WebApplication
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var myComponentClass = new MyComponentClass();
            var x = myComponentClass.getKnot();
            WebFigureControl1.WebFigure = new WebFigure();
        }
    }
}

当我在 Visual Studio 的开发 Web 服务器上运行此页面时 - 一切都很好,图工作正常。

但是,当我尝试在运行在 Win7 x32 上的本地 iis 7.5 上部署 webfigure 时 - iis 应用程序池崩溃。系统事件日志中有一个条目“服务应用程序池‘经典 .NET AppPool’的进程与 Windows 进程激活服务发生致命通信错误。进程 ID 为‘3676’。数据字段包含错误号 6D000780”。这发生在 MyComponent 实例化时。

迁移到 IIS 后我会忘记什么?

其他示例,如幻方控制台应用程序,运行完美,每个 matlab 组件都实例化,但不是在 IIS 环境中。

编辑:我使用 Windows 7 和 MATLAB 2009b 部署了一个虚拟机,并尝试了相同的示例。一切正常。:(。也许是 MATLAB 2010 问题?

4

1 回答 1

3

我遇到了同样的问题(MCR 在 Windows Server 2008 中使 AppPools 崩溃)。这似乎是 MCR 和 IIS 7 之间的问题。在联系 Mathworks 支持后,他们告诉我这是由 MCR 中的错​​误引起的(与“NetworkService”AppPool 身份的权限有关)。我收到以下建议:

要解决此问题,您可以使用以下两个步骤之一:

  1. 创建一个名为 MATLAB_PREFDIR 的环境变量,并让它指向 NETWORK SERVICE 具有写入权限的目录。或者,

  2. 创建一个在“LocalSystem”标识下运行的新应用程序池(在应用程序池的“高级设置...”下查看)。然后将您的应用程序配置为使用此应用程序池(应用程序的“基本设置...”)。

我应用了第二个建议,它解决了我的问题。我希望这对遇到同样问题的其他人有所帮助。

于 2011-01-14T21:45:04.790 回答