Hello World Silverlight Web アプリケーションをデバッグするのに、本当にイライラする 1 日を過ごしました。このアプリは、Windows Communication Foundation (WCF) を介して、リモート サーバーでホストされている Hello World Web サービスと通信します。
最初、このアプリは常に次のエラーを表示しました。
An error occurred while trying to make a request to URI
'http://remoteServer/service'. This could be due to attempting to
access a service in a cross-domain way without a proper cross-domain policy
in place, or a policy that is unsuitable for SOAP services. You may need to
contact the owner of the service to publish a cross-domain policy file and
to ensure it allows SOAP-related HTTP headers to be sent.
しばらくグーグルで検索した後、よくあるクロスドメインの問題に出くわしたと思いました。そこで、クロスサイト ポリシー ファイルを Web ルート フォルダーに追加しようとしました。しかし、これはエラーを殺しませんでした。
幸いなことに、Web サービスのprogram.csでメイン関数の前に "[STAThread]" キーワードがある WCF サービスのコードを偶然オンラインで見ました。つまり、メイン メソッドの前に [STAThread] を追加しました。この簡単なトリックで、魔法のように問題が解決しました。しかし、この背後にあるメカニズムについてはわかりません。誰でも私に説明できますか?
ところで: 別の問題は、localhost でサービスをホストすると、上記のエラーが返されることです。つまり、Silverlight アプリがサービスと通信できません。ただし、コンソール アプリケーションはサービスと正常に通信できます。これは、サーバーが提供している間に WCF を操作するために、Silverlight アプリが必要とするシステム サービスをローカル ホストが無効にするためではないかと考えています。