2009-03-30 7 views
3

私はVistaIIS7を持っています。Silverlightアプリケーションからlocalhost上のXMLファイルを読み取る方法は?

がlocalhostからxmlファイルを読み取る単純なSilverlightアプリケーションを作成したいとします。

私は(私が管理者として「許可」をコピーして、クリックする必要がありました)、このファイルを作成:

C:\inetpub\wwwroot\data\customers.xml

と私は、ブラウザでここに行くときにそれを見ることができます。

http://localhost/data/customers.xml

しかし、私は、次のコードを実行すると、私はターゲット呼び出し例外を取得:

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(); 
     } 
    } 
} 

だから私は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> 

をしかし、私はまだターゲットを取得呼び出し例外エラー。

{System.Security.SecurityException ---> System.Security.SecurityException: Sicherheitsfehler BEI System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(たIAsyncResult ここ

フル内部例外でありますasyncResult)bei System.Net.Browser.BrowserHttpWebRequest。 <> c__DisplayClass5.b__4(オブジェクト sendState)bei System.Net.Browser.AsyncHelper。 <> c__DisplayClass2.b__0(sendStateオブジェクト)--- Ausnahmestapelüberwachunginternenエンデデル--- BEI System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod、オブジェクト状態) System.Net.Browser.BrowserHttpWebRequest.EndGetResponse BEI System.Net.WebClient.OpenReadAsyncCallback( たIAsyncResult結果)BEI System.Net.WebClient.GetWebResponse(WebRequestクラス 要求たIAsyncResult結果)BEI(たIAsyncResult asyncResult)}

更新1:ウィンドウで元私はC:\inetpub\wwwroot\dataを右クリックし、IIS_USERSをそのディレクトリの共同所有者にしました。しかし、同じエラーが表示されます。 :-(

アップデート2:も ​​"みんな" C:\inetpub\wwwroot\dataの共同オーナー、同じエラーました。:-(

アップデート3:は、管理者としてコマンドウィンドウを開き、次のコマンドを実行します。netshのhttpはurlacl URLを追加= http://+:80/ユーザー= MYDOMAIN \ MYUSERNAME

他に何私が読むことができるようにする必要がありませんSilverlightアプリケーションからローカルホストからテキストファイル

実用的ANSWER:?

試験するため

がローカルだけの一時的なローカルホストのウェブに公開あなたも、あなたが生きて公開するときに必要な変更を行い、その後、クロスドメインファイルを必要としないためERVERポート:

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; 
       } 

      } 
     }   



    } 
} 
+0

(スタックトレースを使用して)正確なエラーメッセージを投稿できますか? –

+0

OK内部例外が追加されました:Sicherheitsfehlerは単に「セキュリティエラー」です。これはcrossdomainpolicy.xmlがない場合とまったく同じエラーです –

答えて

1

私が見たことから、通常の動作は、Silverlightのクロスドメインの問題を完全に回避し、SilverlightコードがそのWebサービスを介して通信できるようにするWebサービスを作成することです。

1
+0

、そのページには「クライアントのrootにclientaccesspolicy.xmlファイルを保存しますサービスがホストされているドメイン。それは私がしたことです。テストのように、私はclientaccesspolicy.xmlをC:\ inetpub \ wwwroot \ dataに追加しましたが、予想通りには動作しません。それ以外に何が必要ですか? –

0

は属性http-request-headers="Content-Type"を削除してください、私はどのようなものかわかりません習得している。

+0

ありがとう、それはまだ同じエラーを試して、私はこれは、VistaのACLセキュリティの問題を判断するのは難しいと思います何ができる、私はwwwrootと下にIUSERへのアクセスを与える必要があります... ASP 3.0に戻って考えてみましょう)、それは単純なものでなければならず、何か共通のものでなければなりません。 –

+0

@エドワード:それは可能性がありますが、それが真実であればあなたのブラウザを経由してそれを訪問することはできません。 firefoxでXMLにアクセスしてみてください。次に、実行中のIEとSLを使用してみてください(httpの会話を調べることができます)。 http://www.fiddlertool.com/fiddler – AnthonyWJones

0

SilverlightアプリケーションからローカルIIS上のページにアクセスできるような問題がありました。私は、何が起こっていたのかを見るためにHTTPプロキシを構成しました。私の場合、Silverlightはcrossdomainpolicy.xmlの要求を送信していましたが、IISは正しくACLを返していたため、ACLの問題はありませんでしたが、何らかの理由でSilverlightが受け入れられませんでした。

crossdomainpolicyファイルで無限のオプションを試した後、Silverlightも理解しているFlash crossdomain.xmlポリシーファイルの代替オプションを試してみることにしました。

あなたのために働くかもしれません。

<?xml version=""1.0""?> 
<!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd""> 
<cross-domain-policy> 
    <allow-http-request-headers-from domain=""*"" headers=""*""/> 
</cross-domain-policy> 

編集:Silverlightは、最初の要求し、それが見つかった場合、それはなcrossdomain.xmlを要求しないので、これを試してみるために、あなたがcrossdomainpolicy.xmlファイルを削除する必要があります。

+0

あなたが言及した2つの組み合わせを試しましたが、私は上記と同じエラーが表示されます。私は今C:\ inetpub \ wwwroot \ crossdomain.xmlにcrossdomain.xmlファイルしかありません。 IIS7で何かする必要はありますか?私は自分のデータxmlファイルでフォルダへのアクセスを有効にしようとしています。 –

+0

IISサーバーがSLにファイルを取得できないと思われる場合は、IIS応答http://www.pocketsoap.com/tcptrace/pt.aspxを確認するために、ブラウザをプロキシサーバーで構成することを強くお勧めします。 – sipwiz

0

あなたのxmlは形が整っておらず、上部に余分な>があります。

関連する問題