设为首页 收藏本站
查看: 1131|回复: 0

[经验分享] 如何创建可供Silverlight调用的SharePoint in-build web service

[复制链接]

尚未签到

发表于 2015-9-29 10:11:11 | 显示全部楼层 |阅读模式
  在Silverlight被引入到SharePoint开发中后,很多时候SL需要调用SP后台的service来达到数据交互的目的,我们当然可以在iis上部署另一套专门通过SharePoint 的object model 来完成数据交互的service, Silverlight客户端只要调用这个service即可,但是这样的service脱离的SharePoint的context,我们无法通过SPContext对象来直接取得相关信息,并且单独维护一个service站点,无形中也增加了复杂性。
  此处详细介绍如何配置一个可供Silverlight调用的SharePoint 内置web service.
  首先,需要创建一个Web service
  1.打开visual studio 2008,新建一个ASP.NET Web service application 的项目InbuildCustomizationService
  2.在生成的CustomizationService.asmx.cs文件中完成你的代码。
  3. 为你的项目的dll添加强命名,如果你的web service中引入了其他的Assembly, 将这些Assembly分别强命名。
  4. 将所有的Assembly加入到GAC中:
  在VS 2008的命令窗口 输入 gacutil.exe -if "<Full file system path to DLL>".
  5. 通过Refactor等反编译软件取得CustomizationService.dll的信息,打开CustomizationService.asmx,将其内容修改为


<%@ WebService Language="C#"  Class="InbuildCustomizationService.CustomizationService, InbuildCustomizationService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30d08361d816be91" %>  
  其中红色部分内容来自Refactor, InbuildCustomizationService.CustomizationService是class名,InbuildCustomizationService是Assembly名。
  6.Copy CustomizationService.asmx到"\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS",此路径映射SharePoint站点的http//site/_layouts/, 在VS 2008的命令窗口 输入
  disco http://MyServer/_layouts/CustomizationService.asmx
  将生成的CustomizationService.disco 和CustomizationService.wsdl文件Copy到 "\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS."
  7.加入SharePoint的一些类引用,即CustomizationService.disco和CustomizationService.wsdl中的<?xml version="1.0" encoding="utf-8"?>替换为

DSC0000.gif DSC0001.gif 代码

<%@ 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"; %>
  
  8.修改CustomizationService.disco ,将其中的Contract ref和soap替换为动态的URL


代码

<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:CustomizationServiceSoap" 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:CustomizationServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />  
  9.修改CustomizationService.wsdl,将其中的soap address替换为动态的URL
  


<soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />  
  10. 将CustomizationService.wsdl和CustomizationService.disco重命名为.aspx,例如CustomizationServicewsdl.aspx. 因为layout下sharepoint无法识别到.wsdl或.disco文件类型。
  完成上述操作,你已经可以在http://yoursite/_layouts/CustomizationService.asmx下调用Web Service了,但是笔者发现,这样的webservice在被silverlight的客户端调用时依旧无法得到SPContext的对象,在CustomizationService.asmx中使用的SPContext返回null值,因此只能改变发布的位置,象SharePoint内置的访问list的web service-list.asmx一样,将CustomizationService.asmx部署到http://yoursite/_vti_bin/下。
  11. Copy CustomizationService.asmx,CustomizationServicewsdl.aspx,CustomizationServicedisco.aspx 三个文件到"\program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI" 下,修改ISAPI目录下的spdisco.aspx 文件,在其中加入

代码

<contractRef  ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/CustomizationService.asmx?wsdl"),Response.Output); %> docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/CustomizationService.asmx"),Response.Output); %> xmlns="http://schemas.xmlsoap.org/disco/scl/" />
  <discoveryRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/CustomizationService.asmx?disco"),Response.Output); %> xmlns="http://schemas.xmlsoap.org/disco/" />  
  这样你在客户端调用是,可以直接用vs添加这个webservice作为web reference
  完成以上内容,重启iis,然后打开"http://yoursite/_vti_bin/CustomizationService.asmx"可以访问我们部署的Service。同时SPContext对象对应了当前的Context。
  12. 添加一个Silverlight application, 添加http://yoursite/_vti_bin/CustomizationService.asmx作为web reference,当异步访问Service时出错。检查发现Silverlight存在跨域访问的问题,创建跨域访问协议文件clientaccesspolicy.xml,内容如下,将其Copy到yoursite在iis上的根目录下,类似"C:\Inetpub\wwwroot\wss\VirtualDirectories\yoursite&#8221;下。

代码

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource include-subpaths="true" path="/"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>  
  完成上述操作,可以发现我们开发的Silverlight client可以通过一个自定义的in-build SharePoint service安全的访问SharePoint数据了
  加一张Demo结果图:
DSC0002.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120324-1-1.html 上篇帖子: SharePoint工作流开发点滴(3) 下篇帖子: Office 365
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表