我正在尝试开发一个基于Autodesk Inventor引擎的非常简单的web应用程序。
我正在使用Visual Studio 2010和Inventor 2015在Win7 64位上进行开发,它的所有功能都能很好地进行调试,但当我在web服务器上发布时,我收到了错误:
HRESULT:0x800401F3(CO_E_CLASSSTRING(
以及消息
接口字符串无效
我收到错误的C#代码行是:
Inventor.Application _invApp = (Inventor.Application)Marshal.GetActiveObject("Inventor.Application");
我测试的完整代码如下:
using Inventor;
using System.Runtime.InteropServices;
namespace web_debug_cs
{
public partial class debug_runinventor : Ssytem.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) { startInventorApplication(); }
private void startInventorApplication()
{
string sDebug = string.Empty;
try
{
Inventor.Application _invetorApp = (Inventor.Application)Marshal.GetActiveObject("Inventor.Application");
sDebug = "Success!!!";
}
catch (Exception ex) { sDebug = "UNSUCCESS!<br />" + ex.Message; }
lblAnswer.Text = sDebug;
}
}
}
我直接从Inventor 2015指南中获得此代码,但(重复(在本地机器上一切正常,但在服务器上不正常。
- 我检查了权限(每个人:完全控制(
- 我在system32和SysWOW64上使用regsvr32手动注册(无法注册(
- 我用regasm注册了框架32和64(注册成功!(
- 我将网站设置为使用32位应用程序
但没有什么能解决这个问题。
我考虑过用pInvoke手动导入dll的可能性,但没有成功。。。
我在谷歌上搜索了很多,我试图向Autodesk申请,但没有成功。
我在服务器上启动了Inventor,以验证它是否工作,并且工作得很完美!
有人能帮我吗?
提前感谢您的回复!
Emanuele
我不希望这样做,原因很简单:网页作为服务运行,Inventor作为用户级应用程序运行。想象一下:100个客户端/浏览器请求该网页,您的应用程序将启动Inventor 100次。但更重要的是,该网页并不在用户层面。
最好的工作机会是:你的网页收到一个请求(比如创建一个.ipt文件(,创建一个必须执行操作的记录(例如,一个带有说明或数据库条目的新.txt文件(,Windows服务检测到该请求并启动Inventor来处理它。在这种情况下,你会有一个队列,请求由你的网页放置,但稍后会处理。
但我必须说,EULA不支持也不允许这样做,请查看它。