热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> Silverlight>>正文内容

Silverlight与WCF之间的通信--客户端定时请求WCF服务

发布时间:2010年08月19日点击数: 佚名

这几天在做一个Silverlight的页面聊天工具,基本上从头看了一遍Silverlight和WCF相关的东西,也遇到了不少问题,刚开始是用Silverlight做了定时请求服务器的数据信息,后期准备利用WCF的双工通信来做,通信过程分为两个部分记录。

一 ,需要建立一个WCF的服务端

这里直接在Silverlight的站点中新建了一个WCF服务,代码如下: 

  1. //先定义服务契约 
  2.  
  3. [ServiceContract]  
  4.     public interface IChatService  
  5.     {  
  6.         [OperationContract]  
  7.         bool SendMessage(MessageInfo msg);  
  8.  
  9.         [OperationContract]  
  10.         List<MessageInfo> GetMessages(string UserAccount);  
  11.     } 
  12.  
  13. //再定义数据契约 
  14.  
  15. [DataContract]  
  16.     public class MessageInfo  
  17.     {  
  18.         [DataMember]         
  19.         public string ID { setget; }         
  20.         [DataMember]  
  21.         public string Title { setget; }  
  22.         [DataMember]  
  23.         public string Message { setget; }  
  24.         [DataMember]  
  25.         public DateTime SendTime { setget; }  
  26.         [DataMember]  
  27.         public DateTime? ReadTime { setget; }  
  28.         [DataMember]  
  29.         public string Sender { setget; }            
  30.         [DataMember]  
  31.         public string ReceiveUser { setget; }  
  32.         [DataMember]  
  33.         public string ReceiveOrgan { setget; }  
  34.         [DataMember]  
  35.         public string ReceiveMode { setget; }  
  36.         [DataMember]  
  37.         public int State { setget; }  
  38.         [DataMember]  
  39.         public int Receipt { setget; }  
  40.         [DataMember]  
  41.         public string Source { setget; }  
  42.  
  43.     } 
  1. //最后在webconfig中配置好服务 
  2.  
  3. <system.serviceModel>  
  4.         <behaviors>  
  5.             <serviceBehaviors>  
  6.                 <behavior name="ChatBehavior">  
  7.                     <serviceMetadata httpGetEnabled="true" />  
  8.                     <serviceDebug includeExceptionDetailInFaults="false" />  
  9.                 </behavior>  
  10.             </serviceBehaviors>  
  11.         </behaviors>  
  12.       <services>  
  13.         <service behaviorConfiguration="ChatBehavior" name="WebChat.Web.ChatService">  
  14.           <endpoint address="" binding="basicHttpBinding" contract="WebChat.Web.IChatService"></endpoint>  
  15.         </service>  
  16.       </services>  
  17.         <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />  
  18.     </system.serviceModel> 

 

到这里呢,一个服务就Host在IIS上了,可以通过浏览服务或服务引用进行验证服务是否正常运行。

image

二,在Silverlight中向服务器请求数据 

  1. public partial class MainPage : UserControl  
  2.     {  
  3.         Timer timer;  
  4.         ChatService.ChatServiceClient proxy;  
  5.  
  6.         BasicHttpBinding binding;  
  7.         EndpointAddress endPoint;  
  8.  
  9.         public MainPage()  
  10.         {  
  11.             InitializeComponent();  
  12.  
  13.             binding = new BasicHttpBinding();  
  14.             endPoint = new EndpointAddress("http://localhost:1939/ChatService.svc%22); 
  15.  
  16.             timer = new Timer(new TimerCallback(GetMessages),this,100,100);  
  17.         }  
  18.  
  19.         #region 定时检测信息  
  20.         public void GetMessages(object obj)  
  21.         {  
  22.             proxy = new ChatService.ChatServiceClient(binding, endPoint);  
  23.             proxy.GetMessagesCompleted += new EventHandler<ChatService.GetMessagesCompletedEventArgs>(GetMessagesComleted);  
  24.             proxy.GetMessagesAsync("wengyuli");  
  25.         }  
  26.  
  27.         void GetMessagesComleted(object sender, ChatService.GetMessagesCompletedEventArgs e)  
  28.         {  
  29.             if(e.Error==null)  
  30.             {  
  31.                 if (this.listMsgs.Dispatcher.CheckAccess())  
  32.                 {  
  33.                   this.listMsgs.ItemsSource= e.Result;  
  34.                 }  
  35.                 else  
  36.                 {  
  37.                   this.listMsgs.Dispatcher.BeginInvoke(() => { this.listMsgs.ItemsSource = e.Result; });  
  38.                 }  
  39.             }  
  40.         }  
  41.         #endregion  
  42.  
  43.         #region  发送信息  
  44.         private void btnSend_Click(object sender, RoutedEventArgs e)  
  45.         {  
  46.             ChatService.MessageInfo message = new ChatService.MessageInfo();  
  47.             message.ID = Guid.NewGuid().ToString();  
  48.             message.Receipt = 0;  
  49.             message.ReceiveMode = "user";  
  50.             message.ReceiveOrgan = "";  
  51.             message.ReceiveUser = "xiejianjun";  
  52.             message.Message = this.txtMessage.Text;  
  53.             message.Sender = "wengyuli";  
  54.             message.SendTime = DateTime.Now;  
  55.             message.Source = "web";  
  56.             message.State = 0;  
  57.             message.Title = this.txtMessage.Text;  
  58.  
  59.             proxy = new ChatService.ChatServiceClient(binding, endPoint);  
  60.             proxy.SendMessageCompleted += new EventHandler<ChatService.SendMessageCompletedEventArgs>(SendMessageComleted);  
  61.  
  62.             proxy.SendMessageAsync(message);  
  63.         }  
  64.         void SendMessageComleted(object sender,ChatService.SendMessageCompletedEventArgs e)  
  65.         {  
  66.             if (e.Error == null)  
  67.             {  
  68.                 //MessageBox.Show("服务器返回结果:" + e.Result);  
  69.             }  
  70.         }  
  71.         #endregion  
  72.     } 

前台:

  1. <ListBox Height="213" HorizontalAlignment="Left" DisplayMemberPath="Message" ItemsSource="{Binding MessageInfo}" Name="listMsgs" VerticalAlignment="Top" Width="283" ></ListBox> 

编译并运行后得到数据:

image

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作