Main /

Moss Web Services Verwenden

Moss Web Services Verwenden

Beispielhaftes Aufrufen eines Sharepoint 2007 Web Services aus C# Code unter .NET 3.5

Ziel ist es Sharepoint Webservices aus einer Winforms Anwendung anzusprechen. Der zugriff soll dabei mit den Credentials des aktuellen (gerade angemeldeten) Benutzers erfolgen. Das hört sich zunächst trivial an, ist es aber nicht, denn die Einbindung von Web Services hat sich mit Visual Studio 2008 und .NET 3.5 geändert.

Vorarbeiten:

Zuerst muss dem Visual Studio 2008-Projekt eine Service Reference hinzugefügt werden (früher bei .NET 2.0 hieß es Web Reference):

  • Rechtsklick auf References->Add Service Reference
  • Die Adresse des Sharepoint services eingeben. Sharepoint bietet einen ganzen Blumenstraß voller Web Services an, die sich alle unter <siteurl>/_vti_bin/<servicename>.asmx verbergen. Für dieses Beispiel wurde der Listen-Service <siteurl>/_vti_bin/lists.asmx gewählt.
  • Nach dem Klick auf go sieht man die Methoden die der service anbietet.
  • Nun noch unten eine Service Reference (Das ist der Name den die generierte Proxy-Klasse bekommt) eingeben, in unserem Fall SPWSLists.
  • Klick OK, Proxy Klasse wird generiert, dem Projekt hinzugefügt und ist von nun an verwendbar.
  • Man sollte noch mit using System.ServiceModel die gleichnamige Klasse einbinden.

Code

Dann kann man mit folgendem Code beispielhaft die GetListCollection() Methode des Lists Web-Services aufrufen, die einem alle Listen der Site (also des SPWebs) zurückliefert.

string siteurl = "http://mygreatsharepointportal.com/sites/testsite";

// Authentifizierungs-Methode definieren
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

// Webservice-Adresse definieren
EndpointAddress endpoint = new EndpointAddress(siteurl + "/_vti_bin/lists.asmx");

// Instanz der Proxy-Klasse erzeugen
SPWSLists.ListsSoapClient listService = new SPWSLists.ListsSoapClient(basicHttpBinding, endpoint);

// Client Credentials setzen
listService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
listService.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;

//Web Service Methode aufrufen
XmlElement listout = listService.GetListCollection();

Ergebnis

Jetzt muss man nur noch das output-XML parsen. Befindet sich nur eine Liste "Anouncements" auf der Seite, sähe das erhaltene XML-Snippet in etwa so aus:

<Lists xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <List DocTemplateUrl=""
          DefaultViewUrl="/sites/testsite/Lists/Announcements/AllItems.aspx"
          MobileDefaultViewUrl=""
          ID="{9A9A0359-8ED7-4EE4-A171-75057F150CE3}"
          Title="Announcements"
          Description=""
          ImageUrl="/_layouts/images/itann.gif"
          Name="{9A9A0359-8ED7-4EE4-A171-75057F150CE3}"
          BaseType="0"
          FeatureId="00bfea71-d1ce-42de-9c63-a44004ce0104"
          ServerTemplate="104"
          Created="20090716 01:28:31"
          Modified="20090716 01:28:40"
          LastDeleted="20090716 01:28:31"
          Version="0"
          Direction="none"
          ThumbnailSize=""
          WebImageWidth=""
          WebImageHeight=""
          Flags="536875008"
          ItemCount="1"
          AnonymousPermMask="0"
          RootFolder=""
          ReadSecurity="1"
          WriteSecurity="1"
          Author="5"
          EventSinkAssembly=""
          EventSinkClass=""
          EventSinkData=""
          EmailInsertsFolder=""
          EmailAlias=""
          WebFullUrl="/sites/testsite"
          WebId="acf7b7e5-a0e0-42b8-bbfd-657c21fb24bb"
          SendToLocation=""
          ScopeId="e9f81bce-4231-4163-9f72-faab0ddd3972"
          MajorVersionLimit="0"
          MajorWithMinorVersionsLimit="0"
          WorkFlowId=""
          HasUniqueScopes="False"
          AllowDeletion="True"
          AllowMultiResponses="False"
          EnableAttachments="True"
          EnableModeration="False"
          EnableVersioning="False"
          Hidden="False"
          MultipleDataList="False"
          Ordered="False"
          ShowUser="True"
          EnableMinorVersion="False"
          RequireCheckout="False"
    />
</Lists>

Befinden sich mehrere Listen auf der Site enthält der Output analog dazu für jede Liste einen <List> Block.

Frische Änderungen | Menü editieren
zuletzt geändert am 12.08.2009 09:28 Uhr von Elsni
Edit Page | Page History