25 Stimmen

Silverlight Crossdomain

Ich habe eine Menge Links zu MSDN und "funktioniert auf meinem Rechner!" Antworten gesehen, so möchte ich meine Frage mit den genauen Schritten zu duplizieren, was ich tue zu fragen. Da wir einen bereits existierenden Webservice verwenden, frage ich mit dem Kontext, dass ein Webservice außerhalb meines Projekts gehostet wird, im Gegensatz zu vielen der Tutorials und Videos online. Also hier geht:

*** Erstellen Sie ein neues ASP.NET-Webservice-Projekt.

Es wird mit einer bestehenden Service.asmx-Datei geliefert, die eine "HelloWorld"-Webmethode bereitstellt.

Ansicht im Browser, drücken Sie die Schaltfläche "Aufrufen". Es sollte funktionieren und die Zeichenkette "Hello World" zurückgeben.

Auf meinem Rechner lautet die URL: " http://localhost:15511/WebSite5/Service.asmx "

*** Starten Sie eine neue Instanz von Visual Studio und erstellen Sie ein Silverlight-Webanwendungsprojekt.

*** Kleben Sie dort eine einzelne Schaltfläche mit einem Ereignis-Handler, um den Webdienst aufzurufen. Ich persönlich nuke das Grid und verwenden Sie eine einfache StackPanel. zB.

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <StackPanel>
        <Button Click="Button_Click">
            <Button.Content>
                <TextBlock Text="Test"/>
            </Button.Content>
        </Button>
    </StackPanel>
</UserControl>

Fügen Sie den Webverweis, die using-Anweisung und den Event-Handler für den Button_Click hinzu:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ServiceSoapClient client = new ServiceSoapClient();
        client.HelloWorldCompleted += (object s, HelloWorldCompletedEventArgs ea) => { 
            MessageBox.Show(ea.Result); 
        };
        client.HelloWorldAsync();
    }

Ausführen und natürlich scheitert es an domänenübergreifenden Problemen. Also fügen Sie als nächstes die clientaccesspolicy.xml Datei mit folgendem Inhalt in das Stammverzeichnis Ihrer Webanwendung, die den Dienst hostet:

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

Dies sollte die Dinge öffnen, da es einen Platzhalter für Header, uris und Ressourcen hat, richtig?

  • Führen Sie es erneut aus und Sie erhalten eine Fehlermeldung:

Beim Versuch, eine Anfrage an die URI '' zu stellen, ist ein Fehler aufgetreten. http://localhost:15511/WebSite5/Service.asmx '. Dies könnte darauf zurückzuführen sein, dass versucht wird, auf einen Dienst domänenübergreifend zuzugreifen, ohne dass eine geeignete domänenübergreifende Richtlinie vorhanden ist, oder dass die Richtlinie für SOAP-Dienste ungeeignet ist. Möglicherweise müssen Sie sich mit dem Eigentümer des Dienstes in Verbindung setzen, um eine domänenübergreifende Richtliniendatei zu veröffentlichen und sicherzustellen, dass sie das Senden von SOAP-bezogenen HTTP-Headern erlaubt.

Daher die Frage: Gibt es ein Geheimnis für die Clientaccesspolicy-Datei? Man könnte es alternativ mit der crossdomain.xml versuchen, aber das ergibt ein ähnliches Ergebnis.

0voto

Es funktionierte in meinem PC erfolgreich, Sie können Ihre

clientaccesspolicy.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>

sowohl Ihr Projektverzeichnis als auch Ihr Webservices Root.

0voto

jose lopes Punkte 1

Ich hatte das gleiche Problem und brauchte mehr als 3 Tage, um das Problem zu lösen. Ich bemerke auch, wenn ich den Internet Cloud Service WCF von einer Silverlight-App, die auf einem anderen Webserver gehostet wird, aufrufe, zeigt es nur Cross-Domain-Fehler. Nachdem ich einige Beiträge gelesen habe, konnte ich das Problem nicht lösen, auch wenn ich die Dateien cross-domain.xml und clientaccesspolice.xml im Root-Verzeichnis des Dienstes abgelegt habe. Also versuche ich einfach, statt der Verwendung von http://example.com Ich ändere es einfach in sicher https://example.com und es funktionierte einfach gut. Die domänenübergreifenden Fehler verschwinden. Der Dienst wurde ohne Probleme aufgerufen.

-1voto

Ajay Padharia Punkte 11

Prüfen Sie, welches Projekt als Standard eingestellt ist. Es sollte das Webprojekt sein, das als Standard eingestellt ist, und nicht das Silverlight-Projekt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X