Aus der Praxis – Nutzung der SharePoint Webservices mit einem WCF-Client
avatar

SharePoint bietet diverse Webservices, die es einem Entwickler ermöglichen, von entfernten Systemen aus auf Listen, Elemente, Dokumente, etc. zuzugreifen. In einer aktuellen Anforderung war es nötig, die SharePoint Webservices mit Hilfe eines WCF-Clients anzusteuern. Dabei sind ein paar Einstellungen notwendig, um die ersten Hürden zu nehmen, die schon das einfache Abrufen des Webservices verhindern.

Als Beispiel nehme ich mal den Copy Webservice, mit dessen Methode CopyIntoItems ich ein neues Dokument in einer Dokumentbibliothek erstellen möchte.  Nachdem ich eine WCF-Service Reference in Visual Studio erzeugt hatte, versuchte ich einen einfachen Aufruf mit dem folgenden Code:

byte[] fileContent = ... // get bytes from local file
string[] destinations = { "http://<siteUrl>/<DocuLib>/myfile.pdf" };

CopyServiceProxy.CopyResult[] copyResults = { new CopyServiceProxy.CopyResult() };
CopyServiceProxy.FieldInformation[] fieldInfo = { new CopyServiceProxy.FieldInformation() };
CopyServiceProxy.CopySoapClient serviceClient = new CopyServiceProxy.CopySoapClient();
serviceClient.CopyIntoItems(" ", destinations, fieldInfo, fileContent, out copyResults);

Das Ergebnis war diese Fehlermeldung:

„Die HTTP-Anforderung ist beim Clientauthentifizierungsschema „Anonymous“ nicht autorisiert. Vom Server wurde der Authentifizierungsheader „Negotiate,NTLM“ empfangen.”

Abhilfe schaffte eine Umstellung der folgenden Einstellungen in der app.config der Anwendung.

<security mode="None">
    <transport clientCredentialType="None" proxyCredentialType="None"
        realm="" />
    <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

Die Einstellungen müssen angepasst werden auf die folgenden Werte:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" proxyCredentialType="None"
        realm="" />
    <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

 

Nun kommt man beim Aufruf einen Schritt weiter. Als nächstes kommt diese Fehlermeldung, die leider nicht sehr aussagekräftig ist:

„Eine Ausnahme vom Typ „Microsoft.SharePoint.SoapServer.SoapServerException“ wurde ausgelöst.”

In diesem Fall bringt die folgende Zeile Code Abhilfe:

serviceClient.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

Danach steht der Nutzung des Webservices nichts mehr im Wege.

Weitere Informationen zu den SharePoint Webservices sind hier zu finden: MSDN

 

Technorati-Markierungen: ,,

Ein Gedanke zu “Aus der Praxis – Nutzung der SharePoint Webservices mit einem WCF-Client
avatar

  1. Pingback: Aus der Praxis – Nutzung der SharePoint Webservices mit einem WCF-Client - SharePoint Blogs in German - Bamboo Nation

Schreibe einen Kommentar