WCF (Web Services) + Silverlight 4 + DataGrid + 連接 Database 使用方法 (SOAP Server Side / SOAP Client Side)

 
WCF (Web Services) + Silverlight 4 + DataGrid + 連接 Database 使用方法 (SOAP Server Side / SOAP Client Side)
 
(SOAP Server Side)

   IService1.cs
 
   using System;
   using System.Collections.Generic;
   using System.Runtime.Serialization;
   using System.ServiceModel;
 
   namespace WcfService1
   {
      // 注意: 您可以使用 [重構] 功能表上的 [重新命名] 命令同時變更程式碼和組態檔中的介面名稱 “IService1″。
      [ServiceContract]
      public interface IService1
      {
         [OperationContract]
         List SendItem();
 
         // TODO: 在此新增您的服務作業
      }
 
      // 使用下列範例中所示的資料合約,新增複合型別至服務作業。
      [DataContract]
      public class Player
      {
         [DataMember]
         public int Player_ID;
 
         [DataMember]
         public string Player_Name;
 
         [DataMember]
         public int Team_ID;
      }
   }
 

 

   Service1.svc.cs
 
   using System;
   using System.Collections.Generic;
   using System.Text;
   using System.Data.SqlClient;
 
   namespace WcfService1
   {
      // 注意: 您可以使用 [重構] 功能表上的 [重新命名] 命令同時變更程式碼、svc 和組態檔中的類別名稱 "Service1"。
      public class Service1 : IService1
      {
         public List SendItem()
         {
            List PlayerList = new List();
 
            String connectionString1 = "Data Source=.\\SqlExpress; Initial Catalog=Soccer; Integrated Security=SSPI";
            SqlConnection con1 = new SqlConnection(connectionString1);
            con1.Open();
 
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT * FROM dbo.Player;");
 
            SqlCommand cmd1 = new SqlCommand(sb.ToString(), con1);
            SqlDataReader dr = cmd1.ExecuteReader();
 
            if (dr.HasRows)
            {
               while (dr.Read())
               {
                  PlayerList.Add(new Player
                  {
                     Player_ID = (int)(dr["Player_ID"]),
                     Player_Name = dr["Player_Name"].ToString().Trim(),
                     Team_ID = (int)(dr["Team_ID"])
                  });
               }
            }
 
            cmd1.Dispose();
            con1.Dispose();
 
            return PlayerList;
         }
      }
   }
 

 
(SOAP Client Side – 需自行增加 Service References)

   MainPage.xaml
 
   ……
 
   <Grid x:Name="LayoutRoot" Background="White">
 
      ……
 
         <sdk:DataGrid AutoGenerateColumns="False" Height="263" HorizontalAlignment="Left"
         Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="376">
 
            <sdk:DataGrid.Columns>
 
               <sdk:DataGridTextColumn Header="Player ID" Width="75" CanUserResize="False"
               IsReadOnly="True" Binding="{Binding Player_ID}" />
               <sdk:DataGridTextColumn Header="Player Name" Width="200" CanUserResize="False"
               IsReadOnly="True" Binding="{Binding Player_Name}" />
               <sdk:DataGridTextColumn Header="Team ID" Width="75" CanUserResize="False"
               IsReadOnly="True" Binding="{Binding Team_ID}" />
 
            </sdk:DataGrid.Columns>
         </sdk:DataGrid>
 
      ……
 
   </Grid>
 
   ……
 

 

   MainPage.xaml.cs
 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Net;
   using System.Windows;
   using System.Windows.Controls;
   using System.Windows.Documents;
   using System.Windows.Input;
   using System.Windows.Media;
   using System.Windows.Media.Animation;
   using System.Windows.Shapes;
   using SilverlightApplication7.ServiceReference1;
 
   namespace SilverlightApplication7
   {
      public partial class MainPage : UserControl
      {
         public MainPage()
         {
 
            InitializeComponent();
            Service1Client _Proxy = new Service1Client();
 
            _Proxy.SendItemCompleted += (s, args) => dataGrid1.ItemsSource = args.Result;
            _Proxy.SendItemAsync();
 
         }
      }
   }
 

 

   clientaccesspolicy.xml (令 Silverlight 得到 Permission 連接 SOAP Server – 放係 SOAP Server 既 Root Folder 上)
 
   <?xml version="1.0" encoding="utf-8" ?>
   <access-policy>
      <cross-domain-access>
         <policy>
            <allow-from http-request-headers="*">
               <domain uri="*" />
            </allow-from>
            <grant-to>
               <resource path="/" include-subpaths="true" />
            </grant-to>
         </policy>
      </cross-domain-access>
   </access-policy>
 

 

   crossdomain.xml (令 Silverlight 得到 Permission 連接 SOAP Server – 放係 SOAP Server 既 Root Folder 上)
 
   <?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>