如何仅将SharePoint用作自定义Web应用程序中的内容管理工具?

时间:2011-06-05 15:57:47

标签: asp.net asp.net-mvc sharepoint content-management

我们有许多使用Classic ASP和ASP.NET 2.0技术编写的自定义Web应用程序(包括外部和内部)。内部用户可以将文件上传到这些网站,然后外部用户可以查看这些文件。在某些情况下,外部用户也可以上传文档。 屏幕截图# 1 简要介绍了现有架构。

  1. 内部用户将文档上传到custom web applications。这些文档存储在Web应用程序下定义的文件夹结构中。

  2. 元数据和用户权限(例如谁可以访问文档)存储在SQL Server数据库中。

  3. custom web applications中也存在上传到SharePoint的同一组文档。但是,自定义Web应用程序不了解SharePoint。因此,用户必须从SharePoint下载它们,然后将其上载到自定义Web应用程序。我们目前正在使用SharePoint 2010

  4. 外部用户还可以将文档上载到自定义Web应用程序。根据上传文档的用户,将文档的元数据和用户权限保存到数据库中。

  5. 屏幕截图#1

    1

    屏幕截图# 2 显示了我想要实现的架构。我做了很少的SharePoint开发。大多数情况下,我使用SharePoint Web服务来检索一些列表内容,但仅此而已。我们未来的自定义Web应用程序可能是使用ASP.NET MVC编写的。请在截图后找到问题。

    屏幕截图#2

    2

    以下是我的问题:

    1. 我希望internal users继续在SharePoint中上传和维护他们的文档。用户安全模型已在SQL Server数据库中定义。此安全权限应在SharePoint文档属性中可用,以便用户可以选择谁可以从自定义Web应用程序查看文档。我怎样才能做到这一点?我是否必须将SQL Server用户权限信息复制到SharePoint?

    2. 我相信SharePoint Web ServicesBusiness Connectivity Services (BCS)可以帮助从SharePoint检索文档及其相关信息。哪一个更适合这种情况?

    3. 自定义Web应用程序应仅显示已提交的文档版本。如果用户已在SharePoint中签出文档以进行任何更改,则外部用户不应看到该文档的签出版本。这可能吗?

    4. 有没有人尝试过这种方法?这个模型有任何陷阱吗?这个设计有任何性能问题吗?

    5. 如果我使用ASP.NET MVC重写现有应用程序,这种设计会不会受到任何阻碍?

    6. 是否可以在自定义Web应用程序(ASP.NET Web Forms / ASP.NET MVC)中使用SharePoint搜索功能?换句话说,我可以从自定义Web应用程序发送搜索条件并让SharePoint执行搜索并将结果返回到自定义Web应用程序吗?

    7. 我非常感谢您的投入。

      提前致谢。

1 个答案:

答案 0 :(得分:2)

问题1

很难说没有更多细节。因此,我假设您当前使用Active Directory作为身份验证存储。这意味着您的SQL Server定义了角色列表,然后为这些角色分配了成员资格。我将假设您分配的成员资格是AD用户或组。如果这是真的那么我认为你正确的道路将你的权限从SQL Server推送到SharePoint。 SharePoint的API将满足您的需要,但SharePoint没有内置的机制来同步您的权限更改,这意味着您最终编写了大量的管道代码。我建议您研究可以为您处理同步的产品。 Microsoft MIIS(我相信它现在称为Forefront Identity Management)提供了一组您应该调查的架构模式。


问题2

SharePoint Web服务或SharePoint客户端访问服务应该可以正常工作。我强烈建议使用代理模式将您的应用程序与SharePoint调用隔离(这样您就可以将您的应用程序与SharePoint升级和潜在的内容管理服务器更改隔离开来)。


问题3

是的,这是可能的。如果您使用的是SharePoint Server(非SharePoint Foundation)的发布功能,则可以轻松识别当前发布的版本。否则,您应该设置您查询的服务帐户,以便它只能读取已发布的版本,然后SharePoint将自动修剪您的查询。


问题4

我没有亲自尝试过这种设计,但我非常喜欢创建内容管理域然后在其上面放置抽象服务层的概念。是否存在扩展问题,具体取决于您如何配置SharePoint和应用程序。你可以做对或错。这里不能涵盖两者之间的深度答案。我的一条建议是确保您计划在服务接口(缓存,缓存,缓存)中进行缓存。


问题5

如果您将其实施为服务层,则不会。您只需使用存储库模式来调用服务并返回模型的实体。


问题6

是的,搜索是通过API公开的,因此它也可以包装在服务层中。


祝您好运,并随时与我联系以获得更深入的讨论。