Silverlight与WCF之间的通信(1)SL客户端定时请求WCF服务

Silverlight与WCF之间的通信(1)SL客户端定时请求WCF服务,第1张

概述这几天在做一个Silverlight的页面聊天工具,基本上从头看了一遍Silverlight和WCF相关的东西,也遇到了不少问题,刚开始是用Silverlight做了定时请求服务器的数据信息,后期准备利用WCF的双工通信来做,通信过程分为两个部分记录。 一 ,需要建立一个WCF的服务端 这里直接在Silverlight的站点中新建了一个WCF服务,代码如下:  代码 // 先定义服务契约 [Ser

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

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

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

代码 // 先定义服务契约

[ServiceContract] 
    
public   interface  IChatService 
    { 
        [OperationContract] 
        
bool  SendMessage(MessageInfo msg); 

        [OperationContract] 
        List
< MessageInfo >  GetMessages( string  UserAccount); 
    }

// 再定义数据契约

[DataContract] 
    
public   class  MessageInfo 
    { 
        [DataMember]        
        
public   string  ID {  set get ; }        
        [DataMember] 
        
public   string  Title {  set get ; } 
        [DataMember] 
        
public   string  Message {  set get ; } 
        [DataMember] 
        
public  DateTime SendTime {  set get ; } 
        [DataMember] 
        
public  DateTime ?  ReadTime {  set get ; } 
        [DataMember] 
        
public   string  Sender {  set get ; }           
        [DataMember] 
        
public   string  ReceiveUser {  set get ; } 
        [DataMember] 
        
public   string  ReceiveOrgan {  set get ; } 
        [DataMember] 
        
public   string  ReceiveMode {  set get ; } 
        [DataMember] 
        
public   int  State {  set get ; } 
        [DataMember] 
        
public   int  Receipt {  set get ; } 
        [DataMember] 
        
public   string  Source {  set get ; } 

    }

// 最后在webconfig中配置好服务

< system.serviceModel >  
        
< behaviors >  
            
< serviceBehaviors >  
                
< behavior name = " ChatBehavior " >  
                    
< serviceMetadata httpGetEnabled = " true "   />  
                    
< serviceDeBUG includeExceptionDetailinFaults = " false "   />  
                
</ behavior >  
            
</ serviceBehaviors >  
        
</ behaviors >  
      
< services >  
        
< service behaviorConfiguration = " ChatBehavior "  name = " WebChat.Web.ChatService " >  
          
< endpoint address = ""  binding = " basichttpBinding "  contract = " WebChat.Web.IChatService " ></ endpoint >  
        
</ service >  
      
</ services >  
        
< serviceHostingEnvironment multipleSiteBindingsEnabled = " true "   />  
    
</ system.serviceModel >

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

 

  

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

代码 public   partial   class  MainPage : UserControl 
    { 
        Timer timer; 
        ChatService.ChatServiceClIEnt proxy; 

        BasichttpBinding binding; 
        EndpointAddress endPoint; 

        
public  MainPage() 
        { 
            InitializeComponent(); 

            binding 
=   new  BasichttpBinding(); 
            endPoint 
=   new  EndpointAddress( " http://localhost:1939/ChatService.svc%22);

            timer 
=   new  Timer( new  TimerCallback(GetMessages), this , 100 , 100 ); 
        } 

        
#region  定时检测信息 
        
public   voID  GetMessages( object  obj) 
        { 
            proxy 
=   new  ChatService.ChatServiceClIEnt(binding, endPoint); 
            proxy.GetMessagesCompleted 
+=   new  EventHandler < ChatService.GetMessagesCompletedEventArgs > (GetMessagesComleted); 
            proxy.GetMessagesAsync(
" wengyuli " ); 
        } 

        
voID  GetMessagesComleted( object  sender, ChatService.GetMessagesCompletedEventArgs e) 
        { 
            
if (e.Error == null
            { 
                
if  ( this .ListMsgs.dispatcher.CheckAccess()) 
                { 
                  
this .ListMsgs.ItemsSource =  e.Result; 
                } 
                
else  
                { 
                  
this .ListMsgs.dispatcher.BeginInvoke(()  =>  {  this .ListMsgs.ItemsSource  =  e.Result; }); 
                } 
            } 
        } 
        
#endregion  

        
#region   发送信息 
        
private   voID  btnSend_Click( object  sender, RoutedEventArgs e) 
        { 
            ChatService.MessageInfo message 
=   new  ChatService.MessageInfo(); 
            message.ID 
=  GuID.NewGuID().ToString(); 
            message.Receipt 
=   0
            message.ReceiveMode 
=   " user "
            message.ReceiveOrgan 
=   ""
            message.ReceiveUser 
=   " xIEjianjun "
            message.Message 
=   this .txtMessage.Text; 
            message.Sender 
=   " wengyuli "
            message.SendTime 
=  DateTime.Now; 
            message.source 
=   " web "
            message.State 
=   0
            message.Title 
=   this .txtMessage.Text; 

            proxy 
=   new  ChatService.ChatServiceClIEnt(binding, endPoint); 
            proxy.SendMessageCompleted 
+=   new  EventHandler < ChatService.SendMessageCompletedEventArgs > (SendMessageComleted); 

            proxy.SendMessageAsync(message); 
        } 
        
voID  SendMessageComleted( object  sender,ChatService.SendMessageCompletedEventArgs e) 
        { 
            
if  (e.Error  ==   null
            { 
                
// MessageBox.Show("服务器返回结果:" + e.Result); 
            } 
        } 
        
#endregion  
    }

 

前台:

 

< ListBox  Height ="213"  HorizontalAlignment ="left"  displayMemberPath ="Message"  ItemsSource =" {Binding MessageInfo} "  name ="ListMsgs"  VerticalAlignment ="top"  WIDth ="283"   ></ ListBox >

  

编译并运行后得到数据:

总结

以上是内存溢出为你收集整理的Silverlight与WCF之间的通信(1)SL客户端定时请求WCF服务全部内容,希望文章能够帮你解决Silverlight与WCF之间的通信(1)SL客户端定时请求WCF服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1030358.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存