Wie zum Lesen einer XML-Datei auf localhost von Silverlight-Anwendung?
Habe ich Vista mit IIS7.
Möchte ich das erstellen einer einfachen Silverlight-Anwendung, die liest eine xml-Datei von localhost.
Habe ich diese Datei (die ich kopieren musste und klicken Sie auf "zulassen" als administrator):
C:\inetpub\wwwroot\data\customers.xml
und können es sehen, wenn ich hier im browser:
http://localhost/data/customers.xml
Aber wenn ich den folgenden code ausführen, bekomme ich eine Ziel-Aufruf Ausnahme:
using System;
using System.Net;
using System.Windows.Controls;
using System.IO;
namespace TestXmlRead234
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
WebClient client = new WebClient();
client.OpenReadAsync(new Uri("http://localhost/data/customers.xml", UriKind.Absolute));
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
StreamReader myReader = new StreamReader(e.Result);
Output.Text = myReader.ReadLine();
myReader.Close();
}
}
}
So habe ich C:\inetpub\wwwroot\crossdomainpolicy.xml
:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy >
<allow-from http-request-headers="Content-Type">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Aber ich bekomme immer noch die Ziel-Aufruf Ausnahme Fehler.
Hier ist die vollständige innere Ausnahme:
{System.Sicherheit.SecurityException
---> System.Sicherheit.SecurityException:
Sicherheitsfehler bei
System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult
asyncResult) bei
System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.b__4(Object
sendState) bei
System.Net.Browser.AsyncHelper.<>c__DisplayClass2.b__0(Object sendState) --- Ende der internen
Ausnahmestapelüberwachung --- bei
System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback
beginMethod, Object state) bei
System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult
asyncResult) bei
System.Net.WebClient.GetWebResponse(WebRequest
request, IAsyncResult result) bei
System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult
Ergebnis)}
update 1: Im windows-explorer habe ich dann rechts geklickt C:\inetpub\wwwroot\data
und machte IIS_USERS ein co-Besitzer des Verzeichnisses. Aber immer noch die gleichen Fehler. 🙁
update 2: auch "jeder" Mitinhaber der C:\inetpub\wwwroot\data
, gleiche Fehlermeldung. 🙁
update 3: eröffnete Befehlsfenster als administrator und ausgeführt mit diesem Befehl: netsh http add urlacl url=http://+:80/ user=MYDOMAIN\Benutzername"
Was muss ich sonst noch Lesen zu können, eine text-Datei von localhost aus einer Silverlight-Anwendung?
PRAGMATISCHE ANTWORT:
Zum testen nur lokal veröffentlichen, um die temporäre localhost webserver-port für die Sie gar nicht brauchen, eine cross-domain-Datei, dann die erforderlichen änderungen vornehmen, wenn Sie veröffentlichen live:
using System;
using System.Linq;
using System.Net;
using System.Windows.Controls;
using System.IO;
using System.Xml.Linq;
namespace TestWeb124
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
WebClient wc = new WebClient();
wc.OpenReadAsync(new Uri("http://localhost:49512/customers.xml", UriKind.Absolute));
wc.OpenReadCompleted += wc_OpenReadCompleted;
}
private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
Output.Text = e.Error.Message;
return;
}
using (Stream s = e.Result)
{
XDocument doc = XDocument.Load(s);
Output.Text = doc.ToString(SaveOptions.OmitDuplicateNamespaces);
var customers = from c in doc.Descendants("customer")
select new
{
FirstName = c.Element("firstName").Value
};
foreach (var customer in customers)
{
Output.Text += customer.FirstName;
}
}
}
}
}
ok, fügte der innere Ausnahme: Sicherheitsfehler ist nur "security error", das ist die genau die gleiche Fehlermeldung bekomme ich, wenn ich nicht die crossdomainpolicy.xml
InformationsquelleAutor Edward Tanguay | 2009-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich gesehen habe, das übliche Verhalten ist die Erstellung eines webservice, der sich um Silverlight cross-domain-Probleme völlig, dann haben Silverlight-code die Kommunikation durch die web service.
InformationsquelleAutor Tristan Warner-Smith
- Making-Service zur Verfügung Über Domänengrenzen Hinweg
InformationsquelleAutor Konstantin Tarkus
Versuchen, das Attribut zu entfernen
http-request-headers="Content-Type"
ich bin mir nicht sicher, was das ist acheiving.Das kann eine Möglichkeit, aber wenn das wahr wäre, sollten Sie nicht in der Lage sein besuchen Sie es über Ihren browser. Versuchen Sie den Besuch der XML-Datei in firefox. Dann versuchen Sie es mit DH und SL mit fiddler laufen (so Sie überprüfen können, die http-Kommunikation). fiddlertool.com/fiddler
InformationsquelleAutor AnthonyWJones
Ich hatte ähnliche Probleme, die in der Lage, Zugriff auf die Seiten auf meinem lokalen IIS von einer Silverlight-Anwendung. Ich landete konfigurieren eines HTTP-proxy, um zu sehen, was Los war. In meinem Fall Silverlight wurde dem Absenden der Anfrage für crossdomainpolicy.xml und IIS war richtig, es zurückzugeben, es waren also definitiv keine ACL Probleme, aber für einige Grund Silverlight einfach nicht akzeptieren.
Nach dem Versuch, endlose Optionen in der crossdomainpolicy Datei habe ich beschlossen, ich würde testen, die alternative option der Flash crossdomain.xml policy-Datei, die Silverlight auch versteht und es funktionierte die erste Zeit.
Könnten für Sie arbeiten.
Edit: Zum ausprobieren müssen Sie entfernen Sie die crossdomainpolicy.xml Datei als Silverlight-Anforderungen, erste und, wenn er findet es nicht verlangen crossdomain.xml.
Wenn Sie vermuten, über Ihre IIS-server nicht immer die Dateien durch SL würde ich sehr empfehlen, konfigurieren Sie Ihren browser mit einem proxy-server zum überprüfen der IIS-Antwort pocketsoap.com/tcptrace/pt.aspx.
InformationsquelleAutor sipwiz
Xml-illformed und hat eine extra - > in der Nähe der Spitze.
InformationsquelleAutor