前言

最近的一个项目需要在MOSS 2007中嵌入Silverlight报表,而Silverlight报表则需要开发相应的WebService作为数据源,而这个从MOSS列表中获取数据的Web Service则要以自定义WebService的方法部署在MOSS站点中。园子里几位前辈在若干年前已经写过一些在MOSS中部署自定义WebService的方法(如:文章一文章二),但可能是MOSS版本不同的缘故,我试过数次都未能成功,最终摸索出了worked solution(与前面两位前辈文章中描述的solutions不同点很多),特总结于此,希望能够帮助需要的朋友们。

 

开发WebService

开发WebService的过程与平时相仿,新建WebService项目并直接在code-behind中完成相关代码即可,编译后生成Ceair.Union.Web.dll,如下例:

在MOSS2007中开发并部署自定义WebService

为WebService进行强命名

在WebService项目上“右键”→“属性”中选择“签名”选项卡,勾选“为程序集签名”选项,并在下方的下拉列表中新建一个snk文件,密码可以为空,过程如下图所示: 

 在MOSS2007中开发并部署自定义WebService

 

生成wsdl和dicso文件

这时候,按理说我们可以在VS中直接选择在浏览器中打开,查看刚刚写好的WebService,如下图:

在MOSS2007中开发并部署自定义WebService 

接下来,我们可以用两种方法来获取这个Service的wsdl文件和disco文件:

A方法:

用VisualStudio的命令行工具执行:

disco http://localhost:6949/B2EWidgetService.asmx

 然后就可以在VisualStudio的根目录下找到生成的B2EWidgetService.wsdlB2EWidgetService.disco文件。

B方法:

直接在浏览器里输入:

 http://localhost:6949/B2EWidgetService.asmx?wsdl
 http:
//localhost:6949/B2EWidgetService.asmx?disco

并将结果保存为B2EWidgetService.wsdlB2EWidgetService.disco文件即可。

修改wsdl和disco文件

我们知道wsdl文档和disco文件都是以XML格式对WebService进行描述的,一般情况下可以直接访问到(上节B方法)。而在MOSS中的WebService(包括moss自带的一些,如lists.asmx、alerts.asmx等)其wsdl和disco文件要通过ASP.NET程序化的方式来动态生成并输出。

在这里,我们的自定义WebService也要仿照“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI”里MOSS自带WebService的方法进行部署,步骤如下:

步骤一

分别将B2EWidgetService.wsdlB2EWidgetService.disco重命名为B2EWidgetServicewsdl.aspxB2EWidgetServicedisco.aspx

步骤二

打开B2EWidgetServicedisco.aspx,将里面的代码(注意高亮部分的代码是下面需要改动的,斜体部分为此例子中特定的):

<?xml version="1.0" encoding="utf-8"?>
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
  
<contractRef ref="http://localhost:6949/B2EWidgetService.asmx?wsdl" docRef="http://localhost:6949/B2EWidgetService.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
  
<soap address="http://localhost:6949/B2EWidgetService.asmx" xmlns:q1="http://sharepoint.microsoft.com/samples/" binding="q1:B2EWidgetServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
  
<soap address="http://localhost:6949/B2EWidgetService.asmx" xmlns:q2="http://sharepoint.microsoft.com/samples/" binding="q2:B2EWidgetServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>

相关文章: