silverlight 3でデータベースを使用する。WCF利用

色々調べてやっとここまでたどり着きました。。。
まだまだ、これでは不十分かもしれませんが覚書としてまとめます。

VisualStudio2008にてSilverlightのアプリケーションを作成し、WCFサービスを追加する。

①VisualStudio2008にてSilverlightのアプリケーションを作成。

その際、webプロジェクトもデフォルトで作成されます。
sampleプロジェクトを作成した場合に左図のように
sample.webも追加されている。

 

 

 

 

 

 

 

②WCFサービスを追加する。
Sample.Webプロジェクト上で右クリック、追加/項目の追加でSilverlight対応のWCFサービスを追加する。

③追加されたWCFService.svc.csに操作を追加する。

namespace sample.Web
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class WCFService
    {

    /* OperationContract */ 
        [OperationContract]
        private IEnumerable<dtData> DataTest()
        {
            DataTable dt;
            dt = getDataTable("select * from kojindata");
            List<dtData> lSource = new List<dtData>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                lSource.Add(new dtData
                {
                    dataID = dt.Rows[i]["ID"].ToString(),
                    dataName = dt.Rows[i]["name"].ToString(),
                });
            }
            return lSource;
        }
        private DataTable getDataTable(string query)
        {
            //ここでデータベースに接続しデータテーブルとして返す。
            return dt;
        }
    }

    /* DataContract */
    [DataContract]
    public class dtData
    {
     /* DataMember */
        [DataMember(Name = "ID", Order = 0)]
        private int _dataID;
        [DataMember(Name = "名前", Order = 1)]
        private string _dataName;
        public string dataID
        {
            get { return this._dataID.ToString(); }
            set { this._dataID = int.Parse(value); }
        }
        public string dataName
        {
            get { return this._dataName; }
            set { this._dataName = value; }
        }
    }
}

[OperationContract]と宣言したメソッドはクライアント側から呼ぶことが可能になる。
今回はクライアント側からDataTestメソッドを呼び出し、データベースに接続してデータを取得する。
[DataContract]クラスを作成し[DataMember]を宣言する。
これにより各データを扱えるようになる。

④MainPage.xamlにDataGridコントロールを加える。
今回はx:Name=”datagrid”としました。

⑤クライアント側プロジェクトからサービスの参照を追加する。
sampleプロジェクトの参照設定を右クリック/サービス参照の追加でサービスを検索してWCFServiceを選択。
操作にDataTestが確認できると思います。
ここでは名前空間をSample.WCFとしました。

⑥MainPage.xaml.cs、クライアント側からWCFサービスを呼び出してデータをセットする。

using sample.Sample.WCF;

namespace sample
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
         WCFServiceClient serviceClient=new WCFServiceClient();
            serviceClient.DataTestCompleted +=
                new EventHandler<DataTestCompletedEventArgs>
                (serviceClient_DataTestCompleted);
            serviceClient.DataTestAsync();
        }

        private void serviceClient_DataTestCompleted(object sender, DataTestCompletedEventArgs e)
        {
            datagrid.ItemsSource = e.Result;
        }

    }
}

名前空間にsample.Sample.WCFを追加する。
あとはうまく説明できませんが。。。

これで一応データが表示されるようになりました。

    • こんにちは
    • 2010年 6月 11日

    //ここでデータベースに接続しデータテーブルとして返す。
    の部分には、詳しくは何を書けばいいのですか?

  1. こんにちは。

    どのデータベースに接続するかでコードは変わってきます。
    ここのところ、プログラミングから遠のいているため、
    適切なアドバイスができません。
    申し訳ありません。

    取り急ぎこちらが参考になればと思います。
    http://oshiete.goo.ne.jp/qa/5426165.html

    • jacoyutorius
    • 2010年 8月 22日

    参考にさせていただきました。
    DataGridのプロパティ設定にハマったものの、無事データが表示できました。

  1. トラックバックはまだありません。

jacoyutorius への返信 コメントをキャンセル