65.9K
CodeProject 正在变化。 阅读更多。
Home

MOSS for Developers - 第 8 部分:Web 服务

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009 年 8 月 18 日

Ms-PL

10分钟阅读

viewsIcon

25189

从开发者的角度提供 Web 服务的概述。此内容是 www.myrampup.com 的 MOSS 内容的第 8 部分。

引言


Microsoft.SharePoint.SoapServer 命名空间提供的 Windows SharePoint Services Web 服务包括用于访问网站内容(例如,用于处理列表或网站数据)的方法,以及用于自定义会议、成像、文档工作区或搜索的方法。

这些服务中使用的 SOAP 接口为 Microsoft .NET Framework 开发者提供了对象模型,用于创建与 Windows SharePoint Services 远程交互的解决方案,这些解决方案可以从客户端或自定义应用程序进行访问。这些接口通过 Microsoft.SharePoint 程序集的服务器端对象模型进行定义,并且其设计经过优化,以减少客户端计算机和服务器之间进行事务处理的往返次数。

大多数 Web 服务通过 `/_vti_bin` 虚拟目录提供其功能,该目录在文件系统中映射到 `\\Program Files\Common Files\Microsoft Shared\web Server extensions\12\ISAPI` 物理目录。管理 Web 服务使用 `/_vti_adm` 虚拟目录,该目录映射到 `\12\ADMISAPI`。

您需要安装 Windows SharePoint Services 3.0 SDK

Windows SharePoint Services Web 服务


Windows SharePoint Services Web 服务提供了可用于远程处理 Windows SharePoint Services 部署的方法。下表列出并描述了可用的 Web 服务。

Service 描述
管理 Web 服务 提供用于管理 Windows SharePoint Services 部署的方法,例如用于创建或删除网站。
通知 Web 服务 提供用于处理 SharePoint 网站中列表项通知的方法。
身份验证 Web 服务 提供用于登录使用基于窗体的身份验证的 SharePoint 网站的类。
复制 Web 服务 提供用于在 Windows SharePoint Services 的位置之间复制项的方法。
DocumentWorkspace Web 服务 提供用于管理文档工作区网站及其包含的数据的方法。
窗体 Web 服务 提供用于在处理列表内容时返回用户界面中所用窗体的方法。
Imaging Web 服务 提供允许您创建和管理图片库的方法。
ListDataRetrieval Web 服务 提供用于在 Windows SharePoint Services 的列表上执行查询的方法。
列表 Web 服务 提供用于处理列表和列表数据的方法。
Meetings Web 服务 提供允许您创建和管理会议工作区网站的方法。
People Web 服务 提供用于处理安全组的方法。
Permissions Web 服务 提供用于处理网站或列表权限的方法。
SharepointDirectoryManagementService Web 服务 提供用于远程管理分发组的方法。
SiteData Web 服务 提供用于从 Windows SharePoint Services 中的网站或列表中检索元数据或列表数据的方法。
Sites Web 服务 提供用于返回有关网站集网站模板信息的方法。
SPSearch Web 服务 提供用于在 Windows SharePoint Services 部署中远程执行搜索的方法。
UsersGroups Web 服务 提供用于处理用户、网站组和跨网站组的方法。
Versions Web 服务 提供用于处理文件版本的方法。
Views Web 服务 提供用于处理列表视图的方法。
WebPartPages Web 服务 提供将 Web 部件信息发送到 Web 服务以及从 Web 服务检索 Web 部件信息的方法。
Webs Web 服务 提供用于处理网站和子网站的方法。

演练:创建自定义 Web 服务


此编程任务概述了如何在 Windows SharePoint Services 3.0 的上下文中创建自定义 Web 服务。它逐步演示了创建简单的“Hello World”Web 服务的过程,然后展示了如何修改该服务,使其实现 Windows SharePoint Services 3.0 服务器端对象模型,以返回网站和列表数据。

创建 Web 服务的基础步骤

  • 在 Microsoft Visual Studio 2005 中创建 ASP.NET Web 服务。
  • 在 Web 服务中创建一个类库,其中包含 Web 服务的编程逻辑。
  • 生成并编辑一个静态发现文件和一个 Web 服务描述语言 (WSDL) 文件。
  • 将 Web 服务文件部署到 _vti_bin 目录。
  • 创建一个客户端应用程序来使用该 Web 服务。


在 Visual Studio 中创建 ASP.NET Web 服务

第一步是在 Visual Studio 2005 中创建一个 ASP.NET Web 服务网站。

创建 ASP.NET Web 服务

  1. 在 Visual Studio 中,单击“文件”,指向“新建”,然后选择“网站”。
  2. 在“新建网站”对话框的“模板”框中,选择“ASP.NET Web 服务”,在“位置”框中选择“文件系统”,选择项目使用的编程语言和位置,然后单击“确定”。
  3. 在新的 Web 服务解决方案中,创建一个单独的类库项目来包含 Web 服务逻辑。要创建该项目,请单击“文件”,指向“新建”,然后选择“项目”。
  4. 在“新建项目”对话框的“项目类型”框中选择一种语言,在“模板”框中选择“类库”,为项目指定名称和位置,在“解决方案”框中选择“添加到解决方案”,然后单击“确定”。
  5. 在类库项目中添加对 **System.Web.Services** 命名空间的引用。在“解决方案资源管理器”中右键单击项目,单击“添加引用”,在“添加引用”对话框中选择 **System.Web.Services**,然后单击“确定”。
  6. 用 Visual Studio 在 Web 服务的 **App_Code** 文件夹中提供的默认服务类文件替换类库项目中的默认类文件。

    用服务类文件替换类文件
      1. 在“解决方案资源管理器”中,将 Service.cs 或 Service.vb 拖到类库项目中的顶级节点。
      2. 删除 Class1.cs 或 Class1.vb 文件,并删除 **App_Code** 文件夹中剩余的 Service.cs 或 Service.vb 文件。
  7. 为类库创建强名称
    1. 在“解决方案资源管理器”中,右键单击类库项目,然后单击“属性”。
    2. 在“属性”对话框中,单击“签名”,选择“为程序集签名”,然后选择在“选择强名称密钥文件”列表中。
    3. 在“创建强名称密钥”对话框中,为密钥提供文件名,清除“用密码保护我的密钥文件”复选框,然后单击“确定”。
  8. 仅生成类库项目,请在“解决方案资源管理器”中右键单击该项目,然后单击“生成”。
  9. 要将程序集添加到全局程序集缓存 (GAC),可以使用两个 Windows 资源管理器实例将程序集拖到 `%windows%\assembly` 目录,或者使用 Microsoft .NET Framework SDK 2.0 中安装的命令行实用程序 `gacutil.exe`。

    使用 gacutil.exe 将类库 DLL 复制到 GAC
      1. 要打开 Visual Studio 命令提示符,请单击“开始”,指向“所有程序”,指向“Microsoft Visual Studio 2008”,指向“Visual Studio 工具”,然后单击“Visual Studio 2008 命令提示符”。
      2. 在命令提示符下,键入以下格式的命令,然后按 Enter 键

        gacutil.exe -if "<DLL 的完整文件系统路径>".

  10. 现在,您可以修改 Web 服务的默认 Service.asmx 文件中的程序集信息,以包含 GAC 中 DLL 的信息。要从 GAC 获取信息,请在 Windows 资源管理器中打开 `%windows%\assembly` 目录,右键单击您的程序集,然后单击“属性”。
  11. 在“解决方案资源管理器”中打开 Service.asmx,右键单击该文件并单击“打开”。
  12. 从 Service.asmx 中的页面指令中删除 **CodeBehind** 属性,并修改 **Class** 属性的内容,使指令匹配以下格式,其中程序集名称“MyServiceAssembly”和公钥令牌是您在第 10 步打开的“属性”对话框中指定的值

    <%@ WebService Language="C#" Class="Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131" %>
  13. 在 Visual Basic 中,包括命名空间以标识类,例如,

    Class="MyServiceNamespace.Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131"。
  14. 相应地重命名您的 .asmx 文件,然后保存更改。

生成和修改静态发现和 WSDL 文件

为了提供自定义 Web 服务的发现和描述,您必须创建一个 .disco 文件和一个 .wsdl 文件。由于 Windows SharePoint Services 对其 URL 进行虚拟化(例如,`http://MyServer/MySite/MySubsite` 变成 `http://MyServer`),因此您不能使用 ASP.NET 生成的自动生成的 .disco 和 .wsdl 文件。而是必须创建一个 .disco 页面和一个 .wsdl ASPX 页面,提供必要的重定向并保持虚拟化。

您可以通过临时将 Web 服务托管在虚拟目录(例如 `/_layouts`)中,然后使用 .NET Framework Web 服务发现工具 (Disco.exe) 来获取生成的文件,从而使用 ASP.NET 来生成 .disco 和 .wsdl 文件。

生成静态发现和 WSDL 文件

  1. 在 Windows 资源管理器中,将 Web 服务的 .asmx 文件复制到 `\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS`。
  2. 从 LAYOUTS 目录的命令提示符处运行 Disco.exe 以生成 .disco 和 .wsdl 文件。以以下格式运行命令以在 `\LAYOUTS` 中生成文件

    disco http://MyServer/_layouts/MyCustomWebService.asmx
  3. 要注册 Windows SharePoint Services 对象模型的命名空间,请打开 .disco 和 .wsdl 文件,然后用类似以下内容的指令替换开头的 XML 处理指令 -- `<?xml version="1.0" encoding="utf-8"?>` --

    <%@ Page Language="C#" Inherits="System.Web.UI.Page" %>
    <%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Import Namespace="Microsoft.SharePoint.Utilities" %>
    <%@ Import Namespace="Microsoft.SharePoint" %>
    <% Response.ContentType = "text/xml"; %>

  4. 在 .disco 文件中,修改 contractRef 和 soap address 标签,使其类似于以下示例,该示例通过使用 Microsoft.SharePoint.Utilities.SPHttpUtility 类替换字面路径以生成代码路径,并替换 **binding** 属性中指定的函数名

    <contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output); %>
    docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>
    xmlns="http://schemas.xmlsoap.org/disco/scl/" />
    <soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>
    xmlns:q1="http://tempuri.org/" binding="q1:HelloWorld" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
    <soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>
    xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />

  5. 在 .wsdl 文件中,对指定的 SOAP 地址进行类似的替换

    <soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />
  6. 将这两个文件分别重命名为 MyCustomWebServicedisco.aspx 和 MyCustomWebServicewsdl.aspx,以便可以通过 Windows SharePoint Services 发现您的服务。

将 Web 服务文件复制到 _vti_bin 目录

_vti_bin 虚拟目录物理映射到 `Local_Drive:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI` 目录,该目录包含 Windows SharePoint Services 中使用的默认 Web 服务文件。将新的 MyCustomWebServicewsdl.aspx 和 MyCustomWebServicedisco.aspx 文件,以及 MyCustomWebService.asmx 文件复制到 ISAPI 文件夹。

从 _vti_bin 目录,Web 服务可以向在添加服务 Web 引用时指定的网站提供其功能。

要验证您的自定义 Web 服务是否可发现,请导航到
http://MyServer/_vti_bin/MyCustomWebService.asmx.

在 spdisco.aspx 中列出新的 Web 服务

为了使您的 Web 服务在 Visual Studio 中与默认的 Windows SharePoint Services Web 服务一起被发现,请打开位于 \Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI 的 spdisco.aspx 文件,并添加以下代码,指定 Web 服务的 .asmx 文件。

<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + 
"/_vti_bin/MyCustomWebService.asmx?wsdl"), Response.Output); %> 
docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + 
"/_vti_bin/MyCustomWebService.asmx"), Response.Output); %> 
xmlns=" http://schemas.xmlsoap.org/disco/scl/ " />
<discoveryRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + 
"/_vti_bin/MyCustomWebService.asmx?disco"),Response.Output); %> 
xmlns="http://schemas.xmlsoap.org/disco/" />

创建 Windows 应用程序以使用 Web 服务

将 Web 服务文件复制到 _vti_bin 目录后,下一步是创建一个 Windows 应用程序来使用 Web 服务。

创建使用 Web 服务的 Windows 应用程序

  1. 打开 Visual Studio 2005,然后在“文件”菜单上,指向“新建”,然后单击“项目”。
  2. 在“新建项目”对话框中,选择“Visual C#”或“Visual Basic”,然后选择“Windows 应用程序”模板。
  3. 在“名称”框中键入应用程序的名称,在“位置”框中指定项目文件的位置,然后单击“确定”。
  4. 在“解决方案资源管理器”中,右键单击项目,然后单击“添加 Web 引用”。
  5. 在“添加 Web 引用”浏览器的地址栏中,键入要应用服务的网站的 URL,如下所示,然后按 Enter 键

    http://Server_Name/[sites/][Site_Name/]_vti_bin/MyCustomWebService.asmx
  6. 单击“添加引用”以下载 Web 服务的服务合同。
  7. 在设计视图中打开 **Form1**,显示“工具箱”,然后将一个按钮拖到窗体上。
  8. 双击 **Form1** 上的 **Button1** 控件以在代码编辑器中显示代码隐藏文件,并添加以下调用自定义方法的代码。

    Visual Basic

    Dim MyCustomService As New Web_Reference_Folder.MyServiceClass() 
    MyCustomService.UseDefaultCredentials = True 
    MessageBox.Show(MyCustomService.HelloWorld())


    C#

    Web_Reference_Folder.MyServiceClass MyCustomService = new 
    Web_Reference_Folder.MyServiceClass(); 
    MyCustomService.UseDefaultCredentials = true; 
    MessageBox.Show(MyCustomService.HelloWorld());
  9. 按 F5 编译并运行项目,您将看到一个显示“Hello World”的消息框。

其他资源和参考

MOSS for Developers - 第 8 部分:Web 服务 - CodeProject - 代码之家
© . All rights reserved.