2009-05-24 10 views
0

Ich habe eine Silverlight 2-Anwendung erstellt, die einen WCF-Dienst verwendet. Der Dienst befindet sich in einem lokalen Ordner (nicht IIS) und funktioniert problemlos mit einem Winforms-Test. Wenn ich versuche, den Dienst aufzurufen, wird ein Fehler zurückgegeben: "no pocily for cross domain".WCF für Silverlight App

Ich habe tryed clientaccesspolicy.xml und crossdomain.xml hinzuzufügen: den WCF-Projektordner die iis WWWRoot die lokale Laufwerk root E: \

aber nichts nimmt jeden beeinflussen, wo ich setzen soll Sie?

+0

Was meinen Sie mit „der Dienst in einem lokalen Ordner befindet (nicht IIS)“ Wie ist es gehostet? Wie ist es geöffnet? Dies scheint dem späteren Teil zu widersprechen, in dem Sie sagen, dass IIS ausgeführt wird. – blowdart

Antwort

1

Wie Sie sagen, dass Sie nicht den Dienst haben unter IIS ausgeführt ich einige Annahmen treffen, werde

  • Ihre Silverlight-Anwendung in einer HTML-Seite gehostet wird Sie mit einem Doppelklick laden, geben Sie eine Datei:// URI in der Adressleiste des Browsers oder Sie veröffentlichen sie in Ihrem lokalen IIS.
  • Ihr WCF-Dienst wird in einem selbst gehosteten Prozess wie einer Befehlszeilen-App, einem Windows-Dienst oder einer Winforms-Anwendung ausgeführt. Was auch immer es durch es gehostet wird, wird nicht auf der gleichen URL wie Ihre Silverlight App sein.

Die Silverlight-Anwendung und der WCF-Dienst in getrennten Urls, die App auf Datei gehostet: //example.html oder http://localhost, wenn Sie es IIS und den WCF-Dienst auf http://localhost:1234 veröffentlicht haben. Dies führt zu Problemen beim domainübergreifenden Zugriff, da die Portnummern unterschiedlich sind oder wenn Sie die silverlight-App aus einer Datei: // URI laden und den WCF-Dienst selbst hosten. Wenn Sie den WCF-Dienst selbst hosten, können Sie dies nicht lösen, da hierfür eine clientaccesspolicy.xml-Datei oder eine crossdomain.xml-Datei erforderlich ist, die den Zugriff auf die Dienste Ihrer silverlight-URL ermöglicht, es jedoch keine Möglichkeit gibt, XML aus dem Stammverzeichnis von der selbst hostende WCF-Server.

0

Vielleicht haben Sie IIS danach nicht neu gestartet?

Edit: Hier ist ein gründliches Tutorial, stellen Sie sicher, dass Sie nicht jeden Schritt machen, damit es funktioniert: Silverlight 2.0 and WCF.

+0

Ich hatte nicht einmal IIS auf dem Macine installiert. Ich arbeite am Dateisystem. Ich verwende auch das Beispiel der MS Silverlight-Website-Videos, daher bezweifle ich, dass irgendetwas mit dem Code nicht stimmt –

0

Mm ... überprüfen Sie mit Fiddler, wenn die clientaccesspolicy.xml Anfrage gesendet wird.

Auf der anderen Seite, ein Dummy clientaccesspolicy zu überprüfen, ob die Verbindung funktioniert:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
     <policy> 
      <allow-from http-request-headers="SOAPAction" > 
       <domain uri="*"/> 
      </allow-from> 
      <grant-to> 
       <resource include-subpaths="true" path="/"/> 
      </grant-to> 
     </policy> 
    </cross-domain-access> 
</access-policy> 

Aber Sie sollten versuchen, auf das gleiche Gebiet zu arbeiten (besser, wenn Sie auf Ihren Anruf Sicherheit benötigen).

1

Wenn Sie von einem http: // ...-Kontext in einen file: // ...-Kontext wechseln, handelt es sich eigentlich nicht um ein domänenübergreifendes Problem. Stattdessen handelt es sich um ein kontextübergreifendes Problem, das aus Sicherheitsgründen in Silverlight 2 nicht zulässig ist (dies gilt auch für http: // und https: //). Ich bin nicht sicher, was der Staat dies in Silverlight sein 3.

Verwandte Themen