我开发了一个网站,允许用户上传office文档,然后使用office对象模型将文档转换为HTML文件,然后将其显示在iFrame中.
当然,我已经包含对Office.interop.word的引用,并且该站点在我的开发机器上运行良好.当我将其上传到我的生产服务器时,网站运行正常,直到我尝试上传文档.我最初得到一个类似的错误,说"COM对象没有注册".我意识到我的生产服务器上没有安装Word.所以我安装了word,现在当服务器尝试访问word对象模型时,我收到以下错误:
检索COM类工厂CLSID组件{000209FF-0000-0000-C000-000000000046}失败,原因是以下错误:80070005次访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))
我在注册表中搜索了相应的CLSID,并找到了相应的文件夹.我说完全控制IUSR_帐户,因为我最终加入完全控制"每个人"错误的持久性,并确保这些权限继承下来到该文件夹的其余部分.然后我添加了对IUSR_的完全控制,并最终再次将"every"添加到我的microsoft office文件夹中.
我不知道授予哪些其他权限以及为了使"访问被拒绝"错误消失的地方. 我一定是在错误的地方给予他们,因为据我知道,我不能有任何比"所有人""完全控制"更宽容.
谁能摆脱任何光明?
我已经搜索了两个星期,每晚,详尽地阅读论坛主题并尝试所有建议的解决方案,无论多么古怪.就像许多关于同一问题的论坛主题的情况一样,该网站在我的开发机器上运行良好.它部署没有错误.它适用于生产服务器并从数据库中读取数据,但是当它尝试访问配置文件时,它会因此错误而崩溃.
许多帖子都说要检查或取消选中一个名为"删除app_code.compiled文件"的选项,但显然这是一个Visual Studio 2005选项.在Visual Studio 2010中找不到它.许多帖子都说要确保我的bin目录中存在App_Code.dll.它存在.我手动删除了app_code.compile文件,看看是否有任何区别.我已将目标框架从4.0更改为2.0和3.5.我已经在IIS中完全删除了该站点,创建了一个具有不同名称的不同文件夹,并使用"允许此预编译站点可更新"和"使用固定命名和单页组件"的每个组合重新部署该站点.我已经包含对System.Web.Profile和System.Web以及System.Web.Profile.ProfileCommon的引用.我创造了一个新的,新的网站定位.net框架v4.0并将该web.config文件复制到我的应用程序并重新创建我的配置文件条目,以确保我没有在配置文件中插入任何东西.我烧了蜡烛,用了伏都教的魅力.我已经祈祷了.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.
一篇文章说要确保bin目录中有app_code.dll的引用.我不知道该怎么做,因为它是动态创建的.
有人对此有任何新意吗?
有没有办法在类/命名空间层次结构中声明静态方法,以便可以直接寻址该方法而无需引用其类名?例如,如果我有这个命名空间和类...
namespace UsefulMethods
{
public static class DataBaseStuff
{
public static DataTable GetDataTable(String command, SqlConnection conn)
{
dt = new DataTable();
dostuff...
return dt;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我写了一些使用这个类的代码,我把声明...
using UsefulMethods;
Run Code Online (Sandbox Code Playgroud)
...在我的代码顶部,我可以通过...返回给我的DataTable
DataTable myDataTable = DataBaseStuff.GetDataTable(command, conn);
Run Code Online (Sandbox Code Playgroud)
我想也许我可以引用一个带有using语句的静态类,就像...
using UsefulMethods.DataBaseStuff;
Run Code Online (Sandbox Code Playgroud)
...所以我可以只引用没有这个类名的方法......
DataTable myDataTable = GetDataTable(command, conn);
Run Code Online (Sandbox Code Playgroud)
......但这似乎不起作用.intellisense在using语句中找不到静态类,所以我猜这只适用于名称空间.那么,有没有什么方法可以让我的代码知道我所指的静态类,而不是每次调用其中一个静态方法时都引用它?
谢谢你的阅读.