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();
}
- Führen Sie die Silverlight-Anwendung aus. In meinem Fall gehe ich zu meiner Silverlight Testseite unter: http://localhost:15558/SilverlightApplication1TestPage.aspx
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.