从Web应用程序编辑MS Office文档:自定义WebDaV实现还是......?

时间:2011-07-22 16:19:50

标签: asp.net sharepoint ms-office webdav

以下是我们的设置&要求:

  • 可通过SSL +基本身份验证访问公共Web应用程序。这些应用程序大多数都在ASP.Net中;传统的几个是经典的ASP。服务器是Win 2003 / IIS 6.0
  • 此应用程序需要支持(主要)MS Office文档的在线编辑(2007& 2010)。文档本身与应用程序的内容一起存储在数据库中。
  • 用户应该能够通过HTML链接打开文档;相应的外部Office应用程序(比如MS Word)应该以编辑模式打开文档(使用独占锁定),当用户按下Save按钮时,文档应该回发给应用程序。
  • 最好不要在客户端部署外部插件/ ActiveX控件。

自定义WebDAV实现是最好的方法吗?请注意,我们可能不需要WebDAV的所有功能来支持上述要求。你知道其他选择吗?

如果要实现自定义WebDAV实现,除了http://www.webdav.org/之外,您能否推荐一些好的资源(商业/开源IIS插件,.Net,docs等样本)?顺便说一句,我不喜欢安装像Sharepoint这样庞大的CMS来支持这么小的要求!

我在SO上发现了一个关于自定义WebDav实现的帖子:What are your experiences implementing/using WebDAV?这听起来很令人沮丧:((仅在IIS根目录上可用,需要Windows身份验证等)

提前致谢!

3 个答案:

答案 0 :(得分:5)

我最近开发了一个使用Apache Tomcat WebdavServlet作为基础的简单Webdav服务器。我刚刚从SVN获得了源代码(见下文)并对其进行了修改以满足我的需求。您可以在其中的不同方法中添加代码:

doGet
doLock
doPut
doUnlock
etc...  

我在企业CMS前面使用它作为一个可怜的mand webdav,所以在每个方法中我添加了API调用来获取文档,锁定它,版本或其他任何东西。基本上他们不想从供应商处购买webdav产品,Tomcat是免费的。

至于在客户端上打开Office文件,您可能需要依赖Office安装附带的库(至少从Office XP开始)。请注意,该组件称为SharePoint blah blah,但它不需要在任何地方安装SharePoint。我在这里有一个js片段,以图书馆为例,显然你会修改以满足你的需求。我意识到你说没有ActiveX,但没有它我不是100%肯定你将如何打开链接。欢迎您尝试其他方式。

function webedit(id) {
        if (window.ActiveXObject) {
            var ed; 
            try {
                //Office 2003
                ed = new ActiveXObject('SharePoint.OpenDocuments.2');
            } catch (err1) {
                try {
                    //Office 2000/XP
                    ed = new ActiveXObject('SharePoint.OpenDocuments.1');
                } catch (err2) {                
                    try {
                        //Office 2007
                        ed = new ActiveXObject('SharePoint.OpenDocuments.3');
                    } catch (err3) {                
                        window.alert('Unable to create an ActiveX object to open the document. This is most likely because of the security settings for your browser.');
                        return false;
                    }
                }
            }
            if (ed) {
                ed.EditDocument('<%=webdavPath%>/webdav/'+id);
                return false;
            } else {
                window.alert('Cannot instantiate the required ActiveX control to open the document. This is most likely because you do not have Office installed or you have an older version of Office.');
                return false;
            }
        } else {
            window.alert('Internet Explorer is required to use this feature.');
        }
        return false;    
    }

我也意识到你的服务器是IIS而不是基于Apache的,但是你可以随时使用IIS进行Tomcat安装(这就是我们的工作),并使用JK ISAPI过滤器而不是AJP。无论如何,这是一种做事方式,不需要你购买任何东西。

SVN来源:http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/WebdavServlet.java

答案 1 :(得分:2)

当Office从网址打开文件时,它会检查此网址是否支持WebDav。如果是这种情况,并且WebDav允许写入此URL,则Office将允许用户编辑该文件。

当用户点击浏览器中的链接时让Office打开文件似乎最适合使用这样的网址:

ms-word:ofe|u|https://someOfficeFile.docx

当用户的计算机上没有Office时,此样式的URL不起作用。

与安装在用户硬件上的软件集成当然很棘手,因为开发人员无法控制用户的硬件。

最好是在浏览器中完全完成Office文档编辑。 Office365就是这样做的。通过WOPI协议将业务线应用程序与Office365集成。

Office通过此协议集成到DropBox等。 但是,似乎微软尚未准备好允许大量LOB应用程序与Office365集成。

也许微软有朝一日会发布一个SDK来进行这种集成,而无需从头开始编写WOPI。

答案 2 :(得分:1)

WebDAV有什么问题?存在一些第三方WebDAV服务器组件,您可以将它们插入服务器端应用程序(www.webdavsystem.com,我们的WebDAVBlackbox)。

或者,您可以在客户端上创建一个虚拟文件系统,该系统将使用其他协议与服务器通信(如果您更容易实现以这种方式处理或FTP或SFTP,则使用普通HTTP)。