网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 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 { set; get; }         
  20.         [DataMember]  
  21.         public string Title { set; get; }  
  22.         [DataMember]  
  23.         public string Message { set; get; }  
  24.         [DataMember]  
  25.         public DateTime SendTime { set; get; }  
  26.         [DataMember]  
  27.         public DateTime? ReadTime { set; get; }  
  28.         [DataMember]  
  29.         public string Sender { set; get; }            
  30.         [DataMember]  
  31.         public string ReceiveUser { set; get; }  
  32.         [DataMember]  
  33.         public string ReceiveOrgan { set; get; }  
  34.         [DataMember]  
  35.         public string ReceiveMode { set; get; }  
  36.         [DataMember]  
  37.         public int State { set; get; }  
  38.         [DataMember]  
  39.         public int Receipt { set; get; }  
  40.         [DataMember]  
  41.         public string Source { set; get; }  
  42.  
  43.     } 
  44.  
  45. //最后在webconfig中配置好服务 
  46.  
  47. <system.serviceModel>  
  48.         <behaviors>  
  49.             <serviceBehaviors>  
  50.                 <behavior name="ChatBehavior">  
  51.                     <serviceMetadata httpGetEnabled="true" />  
  52.                     <serviceDebug includeExceptionDetailInFaults="false" />  
  53.                 </behavior>  
  54.             </serviceBehaviors>  
  55.         </behaviors>  
  56.       <services>  
  57.         <service behaviorConfiguration="ChatBehavior" name="WebChat.Web.ChatService">  
  58.           <endpoint address="" binding="basicHttpBinding" contract="WebChat.Web.IChatService"></endpoint>  
  59.         </service>  
  60.       </services>  
  61.         <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />  
  62.     </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

 

设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师