Sharepoint Webservices

by Jess Lassen 17. July 2009 11:17

Engang imellem opstår behovet for at kommunikere med Sharepoint fra en klient applikation eller en anden webapplikation. Hvordan finder man så lige det dokument, den rettighed eller foretager den søgning man har brug for? Sharepoint gemmer indholdet i en database, så en løsning kunne være at tilgå denne direkte og trække data ud heraf. Dette er dog ikke den anbefalede måde at gøre det på, i stedet skal vi kigge på Sharepoint webservices.

En standard Sharepoint installation inkluderer følgende webservices som kan tilgås via http://<site>/_vti_bin/<webservicenavn>

Man må dog engang imellem erkende at de indbyggede webservices ikke altid opfylder ens behov, og så må man lave sin egen Sharepoint webservice. Det fede ved at lave sin egen Sharepoint webservice er at du har adgang til Sharepoints API - så det er ikke meget anderledes end normalt Sharepoint udvikling.

Der er dog følgende forskelle fra almindelige .NET webservices:

Codebehind koden til .asmx filen skal kompileres separat og placeres i GAC’en og .asmx filen skal henvise til denne.

.disco og .wsdl filer skal genereres manuelt med Service Discovery tool (Disco.exe). Derefter skal de omskrives til .aspx filer, så deres indhold kan genereres runtime. Wsdl filen skal endvidere regenereres hver gang du tilføjer nye webmethods i din service, hvilket kan være lidt irriterende.

Sådan laver du din sharepoint webservice:

Opret asmx filen og kompilér asmx code-behind filen.
Referér asmx filen til code-behind filen:

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

Opret de statiske .disco og .wsdl filer med Service Discovery tool.
Opret .aspx versioner af .disco og .wsdl filer og kopier indholdet ind i nyoprettede filer. ([service]disco.aspx og [service]wsdl.aspx)

Indsæt følgende i toppen af .aspx siderne:

<%@ 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"; %>

Tilret url'erne i disco.aspx og wsdl.aspx filerne så de understøtter sharepoints virtual path provider.
disco.aspx:

<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.aspx:

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

Deploy de 3 filer til \Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI

Microsoft har skrevet en udmærket Walkthrough Guide til at lave sin egen Sharepoint webservice. Så hvis man har brug for at udvikle sin egen Sharepoint webservice er denne guide et godt startpunkt. http://msdn.microsoft.com/en-us/library/ms464040.aspx

Tags: ,

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

RecentPosts