Wcf 在运行时以编程方式访问Sharepoint列表(在设计时不创建服务引用)

Wcf 在运行时以编程方式访问Sharepoint列表(在设计时不创建服务引用),wcf,sharepoint,sharepoint-2010,Wcf,Sharepoint,Sharepoint 2010,我正在创建一个应用程序,最终用户可以配置该应用程序来访问用户输入的不同SharePoint网站上的SharePoint列表 我在网上遇到的阅读SharePoint列表的所有示例如下: 打开或创建Visual Studio 项目 在解决方案资源管理器中, 在“引用”节点上单击鼠标右键,然后单击 然后单击添加服务引用 在“地址”框中,键入要发送的URL 目标站点和附加 /_vti_bin/ListData.svc。例如 该站点的地址 intranet.wingtip.com将是 更改中的默认名称

我正在创建一个应用程序,最终用户可以配置该应用程序来访问用户输入的不同SharePoint网站上的SharePoint列表

我在网上遇到的阅读SharePoint列表的所有示例如下:

  • 打开或创建Visual Studio 项目
  • 在解决方案资源管理器中, 在“引用”节点上单击鼠标右键,然后单击 然后单击添加服务引用
  • 在“地址”框中,键入要发送的URL 目标站点和附加 /_vti_bin/ListData.svc。例如 该站点的地址 intranet.wingtip.com将是
  • 更改中的默认名称 ServiceReference1中的命名空间框 去做更合适的事,比如 像翼酒石一样
  • 等等等等等等
  • 此方法基于指定的服务器引用在项目中创建代理类。但是,在我的例子中,服务器/站点在设计时是未知的,只有在运行时读取用户指定的站点/列表。你会怎么做(通过读取列表,但仅在运行时)


    注意:我是从运行Sharepoint的计算机之外的另一台计算机拨打此电话。

    这里有几个答案

    如果要查询的所有站点的列表架构都是一致的,则仍然可以使用生成的代理。创建DataContext时,只需将URI传递给用户选择的站点的ListData.svc

    如果没有,那么您可以使用具有适当格式URI的ASP.NET WebRequest并解析返回的ATOM或JSON响应

    有关使用RESTAPI的更多信息,请参阅2009年SharePoint会议的演讲


    您可以在运行时使用URL属性在代理类中设置URL。

    SharePoint不为其web服务提供代理类。因此,无法在运行时设置url。我必须做的是添加2个服务引用,然后将我要访问的服务引用参数化。我使用配置设置来确定要访问哪个。如果站点名称更改或列表更改,那么我需要删除引用,重新添加它们,重新编译并重新部署。无法在运行时更改SharePoint网站/列表。我已经找了三天的答案了。Microsoft不知道如何做到这一点。

    我没有代理类,这不是因为我不知道列表运行在哪台服务器上,我甚至不知道它发布时的任何列表。为什么不在本地URL上创建一个代理类,该类仅在开发期间有效,并在访问列表之前设置真正的URL。我这样做是为了一个运行时可配置的事件处理程序,它可以在服务器场之间同步列表。是的,可能需要采取一种根本不同的、非“微软推荐”的方法。Rob Windsor建议下面的rest api方法可能会奏效。