Dynamics CRM 2011 – Silverlight Anwendungen im Visual Studio entwickeln

In Dynamics CRM 2011 ist es auf einfachem Wege möglich Silverlight Anwendungen einzubetten. Für den Zugriff hierauf stellt das CRM einen OData-WebService bereit der in Silverlight verwendet werden kann. Das SDK stellt bereits in der Beta Version einige Beispiele dafür bereit die eine gute Arbeitsgrundlage bilden. Solange die fertige Silverlight Anwendung in das CRM hochgeladen und von dort ausgeführt wird funktioniert alles … doch sobald die Anwendung komplexer wird ist es nicht mehr praktikabel die Anwendung für jeden Test in das CRM hochzuladen und dort zu testen..

Geht das nicht auch im Visual Studio ??

Von der Entwicklung von Desktopanwendungen sind wir es gewohnt die Anwendung m Visual Studio zu starten und lokal auf dem Arbeitsplatz zu debuggen. Mit Webanwendungen und mit normalen Silverlight-Anwendungen geht das ebenfalls, doch sobald ich versuche aus Silverlight auf den WebService des CRM zuzugreifen erlebe ich leider eine böse Überraschung .. Silverlight Meldet mir eine SecurityException und versucht noch nicht einmal auf den CRM Server zuzugreifen.

Allerdings gibt es vorher einen Zugriffsversuch auf die Datei clientaccesspolicy.xml im Root-Verzeichnis des Servers .. über diese Datei steuert Silverlight den Zugriff über Domänengrenzen, also Grund genug sich die Datei mal näher anzusehen. Diese Datei muss im Web-Root Verzeichnis des WebService liegen den ich aufrufen will. Ich lege diese Datei also auf meinem Entwicklungssystem im dem Verzeichnis mit den CRM-Webdateien an. Für den späteren Produktivbetrieb ist das nicht notwendig, da dann die Silverlight Anwendung ja von dem Webserver geladen wird und der Zugriff somit erlaubt ist.

Als Vorlage verwende ich die Beispieldatei von http://msdn.microsoft.com/en-us/library/cc197955%28VS.95%29.aspx .. doch da habe ich mich leider zu früh gefreut. Diese Beispieldatei funktioniert nicht so wie gewünscht und muss noch etwas modifiziert werden.

Finale Version der clientclientaccesspolicy.xml


<?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 path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>