t100のプログラミング脱出作戦

自分のプログラミング脳をプログラムにして、いつかプログラミングから脱出してやるぞっ!とか夢見ながら、日々プログラム作っていく 百野 貴博 の日記です!今は、屋号『百蔵。』として、Silverlight・WPFを追跡中です! (2007/09/30)
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【--/--/-- --:--】 | スポンサー広告 | トラックバック(-) | コメント(-) top↑
SilverLight2 beta2 でWebサービスを呼ぶ(手がかり編)
SilverLight2 beta 2 からWebサービスを呼んでみようと思って、Webリファレンスの追加を実施してみたところビルドエラー。

なんでじゃーー!!

ネタは2つあって、System.Xml.Linq が見つからないのと、System.ServiceModel.XmlSerializerFormatAttribute が見つからない件。

前者は、参照にSystem.Xml.Linq.dll を追加したら、一応エラーでなくなりました。
(良いのか?それで・・・)
が、後者のエラーがわからない、、、
System.ServiceModel.dll を追加しても、一向に解決しないし、、、

で、Webで調べてみたところ、SilverLight2 Beta2からWCFを使ってWebサービスを呼ぶ。というチュートリアル発見!
で、とりあえず動かしてみました。

今日はこのチュートリアルを動かす手順を殴り書き。
明日、このチュートリアルを解析して普通のWebサービスを呼び出せないか調べる予定です。

というわけで、手順は以下・・・。
ちなみに、発見したチュートリアルはコレです。

この3つめの、3 Filling a DataGrid using Sql, Linq and WCF というやつが、WCF経由でデータを取得して、SilverLight上のDataGridに表示しちゃおうというサンプルです。

チュートリアルは3つめですが、1から順にやらなくてもココから読んでも理解できます。
サンプルのSQL Server Expressデータベースだけ、準備しておけば後は特別なものは要らないです。

では、PDFにそって手順を簡単に殴り書きます。

1.VS2008で、新しいSilverLightプロジェクトを作成
2.Silverlightアプリケーションの追加ダイアログが出たら、「コントロールをホストするための新しいWebをソリューションに追加する」を選び、プロジェクトの種類を「Web Application Project」にする。
3.サーバープロジェクトを右クリックし、「追加」「新しい項目」で、「LINQ to SQL クラス」を選択
4.オブジェクト リレーショナル デザイナが開くので、サーバーエクスプローラーを開いて、適当なテーブルをドラッグ&ドロップでデザイナに入れる。
5.デザイナの空白の部分をクリックして、プロパティタブの 「Serialization Mode」の項目に、Unidirectionalをセットする。
6.再び、サーバープロジェクトを右クリックし、「追加」「新しい項目」で、WCFサービスを追加。
7.追加された IService.cs ファイルに、DBから取得したデータを返す為のメソッド宣言を記述する。

#PDFのP7を参考に、適宜書き換えます。Customerのところは、手順4でデザイナに入れたテーブル名を指定します。

8.Service1.svc.cs ファイルを開き、IService1 の上にマウスポインタを持っていき、出てくるタグを開いて、「IService1 を実装する」を選択します。

#PDFのP8を参考に、適宜書き換えます。db.Customer のところは、手順4でデザイナに入れたテーブル名を指定します。

9.Web.config ファイルを書き換えます。

endpoint 要素の binding属性を、wsHttpBinding から、basicHttpBinding に変更します。
#この辺がキモなのかも。

これでWebサービス側の実装は終わりです。

10.Silverlight プロジェクトを右クリックして、サービス参照の追加を選択。
11.表示されるダイアログの”探索ボタン”をクリックして、先ほど作成したWebサービスを指定したらOKを押す。

#ここでエラーが出る場合は、サーバープロジェクト側をリビルドすると良いかも。

12.Page.xaml ファイルを編集する。

PDFのP11、12の内容を記述します。
分かりにくいですが、全てGridタグの中に記述するようです。

最終的には、こんな感じになります。(かなり省略してます、、、)

<Grid ...>
<Grid.RowDefinitions ...></Grid.RowDefinitions >
<Grid.ColumnDefinitions ...></Grid.ColumnDefinitions >
<Border .../>
<StackPanel ...></StackPanel >
<my:DataGrid ...></my:DataGrid >
</Grid >



13.イベントハンドラーを、page.xaml.cs に追加します。

これもPDFのP13を参照しつつ、適宜変更してください。
特に、Silverlightは 非同期のWebサービス呼び出ししかサポートしていないらしく、~Async というメソッドと、~Completed というイベントの使い方に注意です。


14.動かしてみて終わり。

です。


とりあえず手元でやってみたプロジェクトは動きました。

あれー??
最初に出ていたWebサービスのエラーはなんだったんだろう、、、
キモは、オブジェクトのシリアライズ設定とWeb.config の編集部分かな??

わからん、、、

というわけで、調査が続きます。













管理者にだけ表示を許可する


トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。