MOSS创建自定义WebService服务

来源:互联网 发布:空姐外围女 知乎 编辑:程序博客网 时间:2024/05/29 14:03

关于MOSS中使用自定义WebService这种问题,google一搜会有很多很多!为什么我还要写呢? 我认为有些事情必须自己亲自做一次看到效果了,心里才踏实! 其次也当做自己的学习笔记吧! 做的当中也遇到了好多问题,都解决了,在这里共享大家...

 

MOSS自带Web service

MOSS自己提供的web服务在:C:\Program Files\Common Files\microsoft shared\Web Server Extensions\14\ISAPI 目录下面

几个常用的Web 服务:

  1. 列表服务 :http://localhost:80/_vti_bin/Lists.asmx  ==>可以完成列表的增删改查操作,访问列表视图和列表附件
  2. 搜索服务:http://localhost:80/_vti_bin/Lists.asmx  ==>提供Query方法,构造XML查询返回结果
  3. UserGroup服务:http://localhost:80/_vti_bin/Lists.asmx ==>用户和用户组的增删改查,数据读取,权限设定
  4. Imageing服务:http://localhost:80/_vti_bin/Lists.asmx ==>管理站的中的图片库,文档库

当然里面还有很多其他webservice了,自己去挖掘!利用这些web服务,客服端程序来操作MOSS站的而不用登录网页维护!

 

创建自定义Web Service步骤

  • 新建一个 ASP.NET Web Service 项目
  • 编写业务逻辑方法
  • 生成disco和wsdl文件 如何生成这两个文件呢?下面有详细步骤)
  • 修改disco和wsdl文件
  • 把修改后的disco和wsdl文件和asmx文件复制到 C:\Program Files\Common Files\microsoft shared\Web Server Extensions\14\ISAPI  下,并把程序集放在站的下面的bin目录里面
  • 运行
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Web.Services;using Microsoft.SharePoint;using Microsoft.SharePoint.WebControls;namespace TasksWebService{    /// <summary>    /// TaskService 的摘要说明    /// </summary>    [WebService(Namespace = "http://localhost")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    // [System.Web.Script.Services.ScriptService]    public class TaskService : System.Web.Services.WebService    {        [WebMethod]        public string HelloWorld()        {            return "Hello World";        }        /// <summary>        /// 获取列表的总数        /// </summary>        /// <param name="listName"></param>        [WebMethod(Description="获取列表的总数")]        public string getTaskData(string listName,string rootUrl)        {            SPWeb myWeb = SPContext.Current.Web;            SPListCollection lists = myWeb.Lists;            return (myWeb.Title + " contains " + lists.Count.ToString() + " Web sites.");         }    }   
}

 

1,为程序签名:

右键项目-->属性-->签名-->选中为程序集签名-->选择强名称密钥文件下拉框,<新建...>

然后 清除“使用密码保护密钥文件”复选框,再单击“确定”。

             

 

2,GAC  assembly

         重新生成项目

       将生成的dll文件拖拽到C:\WINDOWS\assembly里

       右键点assembly刚拖进去的文件,点属性,一会要用到的有版本号和公钥标记

            

 

3,修改asmx文件

        用记事本格式打开WebService项目asmx文件,去掉CodeBehind属性,修改 Class 属性的内容,替换成强命名引用,以便该指令与以下格式相匹配,替换后的内容为:

<%@ WebService Language="C#" Class="TasksWebService.TaskService,TasksWebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22898ec57778cb91" %>

主意:Class="命名空间.类名(NameSpace.ClassName), 程序集名称(AssemblyName), Version=1.0.0.0, Culture=neutral, PublicKeyToken=公钥标记"

修改保存后,把asmx文件拷贝到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS下,在IE地址栏键入:http://localhost/_layouts/(你的asmx文件名).asmx   测试是否能通过,若无报错继续下一步

注释详解:若要提供自定义 Web 服务的相关发现和说明,必须创建 .disco 文件和 .wsdl 文件。由于 Windows SharePoint Services 可虚拟化其 URL,因此不能使用由 ASP.NET 自动生成的 .disco 和 .wsdl 文件,而必须创建可提供所需的重定向并维护虚拟化的 .disco 页和 .wsdl ASPX 页。

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

 

4、生成静态发现文件和 WSDL 文件

      使用VS2010命令提示 输入:discohttp://localhost/_layouts/TaskService.asmx  然后回车

     

生成的disco文件和wsdl文件的路径:C:\Program Files\Microsoft Visual Studio 10.0\VC

 

5,若要注册 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"; %>

6、打开.disco 文件,再次修改 .disco 文件,将文本路径替换为代码生成的路径

     找到<contractRef>标签下的 ref属性 和 docRef属性,将其ref 和 docRef值替换为:

ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output); %> docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>

   再找到<soap>标签下的 address属性(通常有两个soap标签,都要替换),将其 address值替换为:

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

 修改后,保存关闭文件

 

7、打开 .wsdl 文件,再次修改 .wsdl 文件,对指定的 SOAP 地址进行以下类似的替换:

     打开文件后移动到最下面找到<wsdl:service name="TaskService">标签,在该标签节点下找到 <soap:address> 的标签(通常有两个:soap:address和soap12:address)的 location属性,将其 location值替换为:

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

 修改后,保存关闭文件

 

8、将.disco 和.wsdl 文件重命名格式分别为 TaskServicedisco.aspx 和 TaskServicewsdl.aspx 的两个文件,以便可以通过 Windows SharePoint Services 检测到您的服务。

 

9、将新的TaskServicedisco.aspx 和 TaskServicewsdl.aspx文件以及 /_layouts下修改TaskService.asmx 的三个文件剪切到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI  下

 

10、若要验证您的自定义 Web 服务是否可以被检测到,WIN+R,iisreset,重启IIS,

        在IE栏键入:http://localhost/_vti_bin/TaskService.asmx

注释:_vti_bin 虚拟目录能够以物理方式映射到本地驱动器:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI 目录,后者包含用于 Windows SharePoint Services 的默认 Web 服务文件.

 

另一个项目:

添加web引用: 地址为:http://localhost/_vti_bin/TaskService.asmx

TaskService.Service mcs = new TaskService.Service();mcs.UseDefaultCredentials = true; //注意设置这个属性为trueResponse.Write(mcs.getTaskData());
原创粉丝点击