我们有许多使用Classic ASP和ASP.NET 2.0技术编写的自定义Web应用程序(包括外部和内部)。内部用户可以将文件上传到这些网站,然后外部用户可以查看这些文件。在某些情况下,外部用户也可以上传文档。 屏幕截图# 1 简要介绍了现有架构。
内部用户将文档上传到custom web applications
。这些文档存储在Web应用程序下定义的文件夹结构中。
元数据和用户权限(例如谁可以访问文档)存储在SQL Server
数据库中。
custom web applications
中也存在上传到SharePoint
的同一组文档。但是,自定义Web应用程序不了解SharePoint。因此,用户必须从SharePoint下载它们,然后将其上载到自定义Web应用程序。我们目前正在使用SharePoint 2010
。
外部用户还可以将文档上载到自定义Web应用程序。根据上传文档的用户,将文档的元数据和用户权限保存到数据库中。
屏幕截图#1 :
屏幕截图# 2 显示了我想要实现的架构。我做了很少的SharePoint开发。大多数情况下,我使用SharePoint Web服务来检索一些列表内容,但仅此而已。我们未来的自定义Web应用程序可能是使用ASP.NET MVC编写的。请在截图后找到问题。
屏幕截图#2 :
以下是我的问题:
我希望internal users
继续在SharePoint中上传和维护他们的文档。用户安全模型已在SQL Server
数据库中定义。此安全权限应在SharePoint文档属性中可用,以便用户可以选择谁可以从自定义Web应用程序查看文档。我怎样才能做到这一点?我是否必须将SQL Server用户权限信息复制到SharePoint?
我相信SharePoint Web Services
或Business Connectivity Services (BCS)
可以帮助从SharePoint检索文档及其相关信息。哪一个更适合这种情况?
自定义Web应用程序应仅显示已提交的文档版本。如果用户已在SharePoint中签出文档以进行任何更改,则外部用户不应看到该文档的签出版本。这可能吗?
有没有人尝试过这种方法?这个模型有任何陷阱吗?这个设计有任何性能问题吗?
如果我使用ASP.NET MVC重写现有应用程序,这种设计会不会受到任何阻碍?
是否可以在自定义Web应用程序(ASP.NET Web Forms
/ ASP.NET MVC
)中使用SharePoint搜索功能?换句话说,我可以从自定义Web应用程序发送搜索条件并让SharePoint执行搜索并将结果返回到自定义Web应用程序吗?
我非常感谢您的投入。
提前致谢。
答案 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公开的,因此它也可以包装在服务层中。
祝您好运,并随时与我联系以获得更深入的讨论。