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

简介:

这几天在做一个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 >

  

编译并运行后得到数据:

 


     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/587838,如需转载请自行联系原作者





相关文章
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
73 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
107 0
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
138 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF使用纯代码的方式进行服务寄宿
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作。
891 0
|
Windows
WCF服务寄宿到IIS
一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
1095 0
WCF服务自我寄宿
WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务、Windows服务、Winform程序、控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便、高效提供服务调用。
1033 0
|
网络架构
(纯代码)快速创建wcf rest 服务
因为有一个小工具需要和其它的业务对接数据,所以就试一下看能不能弄一个无需配置快速对接的方法出来,百(以)度(讹)过(传)后(讹),最后还是对照wcf配置对象调试出来了: 1.创建WebHttpBinding 2.
1011 0

热门文章

最新文章