2008年10月21日

Silverlight2でWebService(SOAP)

一日分の仕事が終わってからの予定が仕事中にもやらないと間に合わなくなってきて、
仕事後回しでSilverlightのお勉強。

SilverlightからWebServiceを呼び出してデータを取得するテストをしました。
btnGetがクリックされたらWebServiceを呼び出す部分です。

private void btnGet_Click(object sender, RoutedEventArgs e)
{

    WebServiceTEST.Service1SoapClient wc = new WebServiceTEST.Service1SoapClient();
    wc.getDataCompleted += new EventHandler<WebServiceTEST.getDataCompletedEventArgs>(wc_getDataCompleted);

    wc.getDataAsync();

}

private void wc_getDataCompleted(object sender, WebServiceTEST.getDataCompletedEventArgs e)
{
    string result = e.Result;
}

こんな感じで、WebServiceは非同期で呼び出します。
これだけで済むなんて便利ですねぇ・・・。

で、テストをしてみたんですが、WebServiceの呼び出しでCommunicationExceptionが
発生してしまいました。
エラー内容は

URI 'http://localhost:1324/Service1.asmx' への要求試行時にエラーが発生しました。これは、正しいクロスドメイン ポリシーを適用せずにクロスドメインでサービスにアクセスしようとしたことか、SOAP サービスには適していないポリシーが原因で発生した可能性があります。サービスの所有者に問い合わせて、クロスドメイン ポリシー ファイルを公開し、SOAP 関連の HTTP ヘッダーが送信されるようにしてもらう必要がある可能性もあります。詳細については、内部例外を参照してください。

だそうです。
Silverlight側のURLがhttp://localhost:1234/なのでドメインが一致しないという判断みたいです。
(ポート番号は例)

これがクロスドメインポリシーのエラーか・・・とおもい、WebService側にclientaccesspolicy.xmlを
作成して、MSDNに書かれていたとおり

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</cross-domain-access>
</access-policy>


※pathをpath="/api"からpath="/"に変更。

しかし、事象は変わりません。

色々調べてるうちに海外のサイトにたどりつき、XMLを比較してみて<policy>タグがないことに
気づきました。30分近く悩んだのに。。。。

良く見れば、<policy>タグがあるものとないものがあるし。


というわけで、ご注意ください。

よくよくもっと調べたら同じ事象ではまってた人を発見。
TrackBackさせてもらいます。

posted by しげ at 16:37| Comment(0) | TrackBack(1) | Silverlight | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

Windowsフォーム開発者向け、Silverlight2アプリ開発メモ
Excerpt: Silverlight2公式HP 2008年11月頃に正式リリースされたSilverlight2(端的にいうとMicrosoft版Flash。開発言語にVB...
Weblog: VB.NETで作る!
Tracked: 2009-01-11 15:32
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。