3

我们有许多使用经典 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 应用程序。根据上传文档的用户,将文档的元数据和用户权限保存到数据库中。

截图#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 Services或者Business 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 应用程序吗?

我非常感谢您的意见。

提前致谢。

4

1 回答 1

2

问题 1

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


问题2

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


问题 3

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


问题 4

我没有亲自尝试过这种设计,但我真的很喜欢创建内容管理域然后在其之上放置一个抽象服务层的概念。您是否会遇到规模问题,取决于您如何配置 SharePoint 和您的应用程序。你可以做对或错。此处无法涵盖两者之间的深度答案。我的一条建议是确保您计划在服务接口(缓存、缓存、缓存)中进行缓存。


问题 5

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


问题 6

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


祝你好运,请随时直接与我联系以进行更深入的讨论。

于 2011-06-05T18:34:52.977 回答