您的位置:首页 > 编程语言 > ASP

创建 ASP.NET Web 服务的基本步骤

2010-10-03 14:21 381 查看
声明:本文来自连接:http://msdn.microsoft.com/zh-cn/library/ms464040.aspx

只是个人在使用过程中对部分内容进行了改造:

创建 ASP.NET Web 服务的基本步骤

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

生成并编辑静态发现文件和 Web Services 描述语言 (WSDL) 文件。

将 Web 服务文件部署到 _vti_bin 目录。 (即将**.asmx拷到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\isapi目录下)

通过在 Spdisco.aspx 中列出 Web 服务使其成为可检测到的

创建客户端应用程序以使用 Web 服务。

在定义 Web 服务的编程逻辑的 Web 服务中创建类库。

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

首先在 Visual Studio 中创建一个 Microsoft ASP.NET Web 服务网站。

创建 ASP.NET Web 服务

在 Visual Studio 中,单击“文件”,指向“新建”,然后选择“网站”。

在“新建网站”对话框的“模板”框中选择“ASP.NET Web 服务”,在“位置”框中选择“文件系统”,再为该项目选择编程语言和位置,然后单击“确定”。

在新的 Web 服务解决方案中,创建一个单独的类库项目以包含 Web 服务逻辑。若要创建该项目,请单击“文件”,指向“新建”,然后选择“项目”。

在“新建项目”对话框的“项目类型”框中,选择一种语言,在“模板”框中选择“类库”,提供该项目的名称和位置,在“解决方案”框中选择“添加到解决方案”,再单击“确定”。



在该类库项目中添加对 System.Web.Services 命名空间的引用。在“解决方案资源管理器”中,右键单击该项目,单击“添加引用”,在“添加引用”对话框中选择“System.Web.Services”,再单击“确定”。

使用 Visual Studio 在 Web 服务的“App_Code”文件夹中提供的默认服务类文件替换类库项目中的默认类文件。

使用服务类文件替换类文件

在“解决方案资源管理器”中,将 Service.cs 或 Service.vb 文件拖至类库项目中的顶级节点。

删除 Class1.cs 或 Class1.vb 文件,并删除保留在“App_Code”文件夹中的 Service.cs 或 Service.vb 文件。

为类库创建一个强名称:
在“解决方案资源管理器”中,右键单击该类库项目,然后单击“属性”。

在“属性”对话框中,单击“签名”,选择“为程序集签名”,然后在“选择强名称密钥文件”列表中选择“<新建>”。

在“创建强名称密钥”对话框,为该密钥提供一个文件名,清除“使用密码保护密钥文件”复选框,再单击“确定”。

若要仅生成类库项目,请在“解决方案资源管理器”中,右键单击该项目,然后单击“生成”。

若要将程序集添加到全局程序集缓存 (GAC) 中,您可以使用 Windows 资源管理器的两个实例将程序集拖到 %windows%\assembly 目录中,或使用随 Microsoft .NET Framework 2.0 软件开发工具包一起安装的命令行实用工具 gacutil.exe。

注:(GAC.cmd如下:

"E:\1\gacutil.exe"

-if E:\project\ClassLibraryNew\bin\Debug\ClassLibraryNew.dll

iisapp /a "SharePoint - 80" /r)

使用 gacutil.exe 将类库 DLL 复制到 GAC

若要打开 Visual Studio 命令提示符,请依次单击“开始”、“所有程序”、“Microsoft Visual Studio 2010、“Visual Studio 工具”和“Visual Studio 命令提示(2010)”。

在命令提示符处,按下列格式键入命令,然后按 Enter。

gacutil.exe -if "<Full file system path to DLL>"。

注:本步可以使用Reflector.exe

现在,您即可使用 GAC 中有关 DLL 的信息修改 Web 服务的默认 Service.asmx 文件中的程序集信息。若要从 GAC 中获取信息,请在 Windows 资源管理器中打开 %windows%\assembly 目录,右键单击您的程序集,再单击“属性”。

若要在“解决方案资源管理器”中打开 Service.asmx,请右键单击该文件,然后单击“打开”。

从 Service.asmx 的页指令中移除 CodeBehind 特性,并修改 Class 属性的内容,以便指令与以下格式相匹配,其中程序集名称“MyServiceAssembly”和公钥标记是在步骤 10 中打开的“属性”对话框中指定的值:

<%@ WebService Language="C#" class="Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131" %>

在 Visual Basic 中,包括用于标识类的命名空间,例如 class="MyServiceNamespace.Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131"。

为 .asmx 文件进行相应的重命名,然后保存所做的更改。

14. 发布网站。由于WSS增强的安全性,我们需要一些特殊的步骤来创建自定义Web服务。当我们使用VS.NET提供的ASP.NET Web service模板来创建我们的SharePoint Web service时,我们必须将Web service创建到单独的IIS网站中,而不能和WSS处于同一个IIS网站(不能使用相同的端口)。同时,我们还必须是运行WSS的机器上本地管理员组的成员。

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

若要提供自定义 Web 服务的发现和说明,必须创建 .disco 文件和 .wsdl 文件。由于 SharePoint Foundation 将虚拟化其 URL(例如,http://MyServer/MySite/MySubsite 将变为 http://MyServer),因此不能使用由 ASP.NET 自动生成的 .disco 和 .wsdl 文件,而必须创建可提供必需的重定向并保持虚拟化的 .disco 页和 .wsdl ASPX 页。

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

生成和编辑静态发现文件和 WSDL 文件

在 Windows 资源管理器中,将 Web 服务的 .asmx 文件复制到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS 中。

在 LAYOUTS 目录的命令提示符处运行 Disco.exe 以生成 .disco 和 .wsdl 文件。按下列格式运行命令,以便在 \LAYOUTS 中生成这两个文件:

disco http://MyServer/_layouts/MyCustomWebService.asmx

eg: disco http://localhost/_vti_bin/NewService.asmx
若要注册 SharePoint Foundation 对象模型的命名空间,请打开 .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"; %>

在 .disco 文件中,像以下示例中一样修改协定引用和 SOAP 地址标记,通过使用 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/" />

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

<soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />

重命名格式分别为 MyCustomWebServicedisco.aspx 和 MyCustomWebServicewsdl.aspx 的两个文件,以便可以通过 SharePoint Foundation 检测到您的服务。

注:可直接从目录:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\isapi 中打开相应文件进行拷贝

将 Web 服务文件部署到 _vti_bin 目录中

_vti_bin 虚拟目录以物理方式映射到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI 目录,该目录包含在 SharePoint Foundation 中使用的默认 Web 服务文件。将新的 MyCustomWebServicewsdl.aspx 和 MyCustomWebServicedisco.aspx 文件以及 MyCustomWebService.asmx 文件复制到 ISAPI 文件夹中。

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

若要验证您的自定义 Web 服务是否可以被检测到,请导航到 http://MyServer/_vti_bin/MyCustomWebService.asmx。
在 spdisco.aspx 中列出新 Web 服务

若要使您的 Web 服务作为与默认的 SharePoint Foundation Web 服务并列的 Web 服务在 Visual Studio 中成为可检测到的,请打开位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\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 应用程序

打开 Visual Studio,在“文件”菜单上,指向“新建”,然后单击“项目”。

在“新建项目”对话框中,选择“Visual C#”或“Visual Basic”,然后选择“Windows 窗体应用程序”模板。

在“名称”框中键入应用程序的名称,在“位置”框中指定该项目文件的位置,再单击“确定”。

在“解决方案资源管理器”中,右键单击该项目,再单击“添加服务引用”。

在“添加服务引用”对话框中单击“高级”,然后在“服务引用设置”框中单击“添加 Web 引用”。

在“添加 Web 引用”浏览器的地址栏中,键入要应用该服务的网站的 URL,如下所示:
http://Server_Name/[sites/][Site_Name/]_vti_bin/MyCustomWebService.asmx
然后按 Enter。

单击“添加引用”以下载该 Web 服务的服务合同。

在设计视图中打开 Form1,显示“工具箱”,然后将按钮拖到该表单上。

双击“Form1”上的“Button1”控件,以在代码编辑器中显示代码隐藏文件,并添加可调用自定义方法的下列代码。

C#

private void button1_Click(object sender, EventArgs e)

{

WebReference.Service dd = new Test.WebReference.Service();

dd.UseDefaultCredentials = true;

MessageBox.Show(dd.GetSiteListCount());

}

按 F5 编译并运行该项目,然后会看到一个其中显示“Hello World”的消息框。

实现 SharePoint Foundation 对象模型

现在,即可尝试使用 Web 服务的类库中的 SharePoint Foundation 对象模型的类型和成员。

实现 SharePoint Foundation 对象模型

添加对 Microsoft.SharePoint 程序集的引用。在“解决方案资源管理器”中,右键单击该类库项目,单击“添加引用”,选择“SharePoint Foundation”,然后单击“确定”。

在 Service.cs 或 Service.vb 项目文件中,必须在对象模型中导入相应的命名空间。例如,若要使用 Microsoft.SharePointMicrosoft.SharePoint.Utilities 命名空间的类型和成员,

using Microsoft.SharePoint;

using Microsoft.SharePoint.Utilities;

重命名 Service.cs 或 Service.vb 中的方法。例如,将名称从 HelloWorld 更改为 GetSiteListCount。

添加以下代码以显示网站的名称及其所包含的列表数。

SPWeb myWebSite = SPContext.Current.Web;

SPListCollection lists = myWebSite.Lists;

return (myWebSite.Title + " contains " + lists.Count.ToString() +

" lists.");

注释

如果您的代码在 HttpGet 请求期间以某种方式修改 SharePoint Foundation 数据,则可能需要允许在网站上进行不安全的更新,可通过设置 AllowUnsafeUpdates 属性来完成此操作。

若要重新生成类库 DLL 并将其复制到 GAC,请重复“创建 ASP.NET Web 服务”中的步骤 8 和步骤 9。

重置 Internet Information Services (IIS) 以使 DLL 中的更改生效。

若要生成新版本的 .disco 和 .wsdl 文件,请重复“生成静态发现文件和 WSDL 文件”中的步骤,但应在适当的情况下更改 .disco 文件中的方法绑定名称(例如,更改为 GetSiteListCount)。

将新版本的 MyCustomWebServicedisco.aspx 和 MyCustomWebServicewsdl.aspx 文件复制到 ISAPI 文件夹中。

打开以前创建的 Windows 应用程序,删除前面对 Hello World 示例的 Web 服务引用,根据需要更改方法名称,然后添加对修改后的 Web 服务的新 Web 引用。

按 F5 编译并运行该项目,然后会看到一个其中显示网站名称及其所包含的列表数的消息框。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: