Comment lire un fichier XML sur le localhost de l'application Silverlight?
J'ai Vista avec IIS7.
Je veux créer une application Silverlight simple que lit un fichier xml à partir de localhost.
J'ai créé ce fichier (que j'ai eu à copier et cliquez sur "autoriser" en tant qu'administrateur):
C:\inetpub\wwwroot\data\customers.xml
et peut le voir quand je rentre ici dans un navigateur:
http://localhost/data/customers.xml
Mais lorsque j'exécute le code suivant, je reçois un exception d'appel cible:
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();
}
}
}
J'ai donc créé 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>
Mais j'ai toujours le exception d'appel cible erreur.
Ici, c'est la pleine exception interne:
{Système.De sécurité.SecurityException
---> Système.De sécurité.SecurityException:
Sicherheitsfehler bei
Système.Net.Le navigateur.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult
asyncResult) à
Système.Net.Le navigateur.BrowserHttpWebRequest.<>c__DisplayClass5.b__4(Objet
sendState) à
Système.Net.Le navigateur.AsyncHelper.<>c__DisplayClass2.b__0(Objet sendState) --- Ende der internen
Ausnahmestapelüberwachung --- bei
Système.Net.Le navigateur.AsyncHelper.BeginOnUI(SendOrPostCallback
beginMethod, état de l'Objet) à
Système.Net.Le navigateur.BrowserHttpWebRequest.EndGetResponse(IAsyncResult
asyncResult) à
Système.Net.WebClient.GetWebResponse(WebRequest
demande, IAsyncResult résultat) à
Système.Net.WebClient.OpenReadAsyncCallback(IAsyncResult
result)}
mise à jour 1: Dans l'explorateur windows, j'ai ensuite cliqué avec le bouton droit C:\inetpub\wwwroot\data
et fait IIS_USERS un co-propriétaire de ce répertoire. Mais toujours la même erreur. 🙁
mise à jour 2: également fait "tout le monde", co-propriétaire de C:\inetpub\wwwroot\data
, même erreur. 🙁
mise à jour 3: ouvert la fenêtre de commande en tant qu'administrateur et exécuté cette commande: netsh http ajoutez urlacl url=http://+:80/ utilisateur=MYDOMAIN\MyUserName
Que dois-je avoir pour être capable de lire un fichier texte à partir de localhost partir d'une application Silverlight?
PRAGMATIQUE RÉPONSE:
Pour tester en local juste de publier temporaire localhost port du serveur web pour lequel vous n'avez même pas besoin d'un cross-domain fichier, puis apportez les modifications nécessaires lorsque vous publiez 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 ajouté l'exception interne: Sicherheitsfehler est juste "erreur de sécurité", c'est exactement la même erreur que j'obtiens lorsque je n'ai pas l'crossdomainpolicy.xml
OriginalL'auteur Edward Tanguay | 2009-03-30
Vous devez vous connecter pour publier un commentaire.
De ce que j'ai vu, le comportement habituel est de créer un webservice qui peut obtenir autour de Silverlight croix domaine des questions entièrement, alors Silverlight code de communiquer par l'intermédiaire de ce service web.
OriginalL'auteur Tristan Warner-Smith
Faire un Service dans l'ensemble des Limites de Domaine
OriginalL'auteur Konstantin Tarkus
Essayez de supprimer l'attribut
http-request-headers="Content-Type"
, je ne suis pas sûr de ce qui est y parvenir.Que peut être une possibilité, mais si c'était vrai, vous ne devriez pas être en mesure de le visiter par le biais de votre navigateur. Essayez de visiter le XML dans firefox. Ensuite, essayez d'utiliser IE et SL avec un violon en cours d'exécution (de sorte que vous pouvez inspecter la http conversation). fiddlertool.com/fiddler
OriginalL'auteur AnthonyWJones
J'ai eu des problèmes similaires de pouvoir accéder à des pages sur mon serveur IIS local à partir d'une application Silverlight. J'ai fini la configuration d'un proxy HTTP pour voir ce qui se passait. Dans mon cas, Silverlight a été l'envoi de la demande de crossdomainpolicy.xml et IIS a été correctement en le retournant alors, il y avait certainement aucune ACL questions, mais pour une raison que Silverlight n'aurait tout simplement pas l'accepter.
Après avoir essayé des possibilités infinies dans la crossdomainpolicy fichier, j'ai décidé que j'avais tester l'option du Flash crossdomain.xml la politique de fichier qui Silverlight comprend aussi et il a travaillé la première fois.
Pourraient travailler pour vous.
Edit: Pour essayer cela, vous aurez besoin d'enlever la crossdomainpolicy.xml fichier Silverlight demandes première et s'il trouve qu'il ne demande crossdomain.xml.
Si vous êtes suspect sur votre serveur IIS de ne pas obtenir les fichiers par le biais de SL, je recommanderais fortement de la configuration de votre navigateur à un serveur proxy pour vérifier la réponse IIS pocketsoap.com/tcptrace/pt.aspx.
OriginalL'auteur sipwiz
Votre xml est illformed et a une > près du sommet.
OriginalL'auteur