Silverlight与WCF之间的通信(3)利用net.tcp绑定方式寄宿到到控制台交互数据-阿里云开发者社区

开发者社区> 技术小胖子> 正文

Silverlight与WCF之间的通信(3)利用net.tcp绑定方式寄宿到到控制台交互数据

简介:
+关注继续查看

最近的项目比较紧,写博客的时间基本都用来看文档和视频了,很感谢老大给了这么多时间让我研究,好几种方案都被我给毙了,因为有要兼顾其他模块,视频聊天的P2P模式也在silverlight下搞不了,看了唯一的一个例子居然还是基于LiveMessage的,silverlight快点支持P2P吧!!目前在数据传递方面基本确定了用WCF来搞定一切,包括聊天,视频和文件传递,不过不能再采用HTTP协议了,改用net.tcp来做,直接host到控制台,试了试IIS,但是比较复杂,明天再调试一下将wcf服务host到IIS上。有兄弟说WCF在文件传递方面不太理想,先出了原型了,后期尽量还是往SOCKET方面靠拢。

先说今天的demo,由于我基本还是逐步进行代码转移的,先做了将服务寄宿到console,并且直接使用console来做客户端的方式。

   

服务端的代码都简单写到一个文件中了,还是以前的几个方法,发信息与收信息 

代码
public class ChatService:IChatService 
    { 
        
private static List<MessageInfo> listMessages = new List<MessageInfo>(); 
        
public void SendMessage(MessageInfo message) 
        { 
            listMessages.Add(message); 
        }
        
public List<MessageInfo> GetMessages(string userName, string partnerName) 
        { 
            var list 
= listMessages.Where(m=>m.PartnerName==userName&&m.UserName==partnerName).ToList(); 
            listMessages.RemoveAll(m 
=> m.PartnerName == userName && m.UserName == partnerName); 
            
return list; 
        } 
    }
    [ServiceContract] 
    
public interface IChatService 
    { 
        [OperationContract] 
        
void SendMessage(MessageInfo message);
        [OperationContract] 
        List
<MessageInfo> GetMessages(string userName,string partnerName); 
    }

 客户端的数据都保存在List中 

private static List<MessageInfo> listMessages = new List<MessageInfo>(); 

实体类 

代码
[DataContract] 
    
public class MessageInfo 
    { 
        [DataMember] 
        
public string Message { setget; } 
        [DataMember] 
        
public string UserName { setget; } 
        [DataMember] 
        
public string PartnerName { setget; } 
    }

 

 简单写了个host类,这里需要指定服务采用的绑定方式和地址以及接口等信息

 代码

public class MyHost 
    { 
        
static ServiceHost host = null
        
public static void Open() 
        {           
            
string strAddress = "net.tcp://localhost:2010/ChatService"
            host 
= new ServiceHost(typeof(ChatService), 
                        
new Uri(strAddress));            
            host.AddServiceEndpoint(
typeof(IChatService), 
                GetBinding(), 
""); 
            host.Open(); 
        } 
        
public static void Close() 
        { 
            
if (host != null && host.State == CommunicationState.Opened) 
            { 
                host.Close(); 
            } 
            host 
= null
        } 
        
public static Binding GetBinding()//这个方法可以供客户端调用,便于统一 
        { 
            NetTcpBinding binding 
= new NetTcpBinding(); 
            binding.TransferMode 
= TransferMode.Streamed; 
            binding.MaxReceivedMessageSize 
= int.MaxValue; 
            
return binding; 
        } 
    }

主方法 

代码
public class Program 
    { 
        
static void Main(string[] args) 
        { 
            MyHost.Open(); 
            System.Console.WriteLine(
"服务已经启动...   敲任意键停止服务"); 
            System.Console.ReadLine(); 
            MyHost.Close(); 
        } 
    }

 那么客户端呢,假定leon和mac对话,发送了一条信息给mac,然后模拟mac去取了这条信息显示出来。 

代码
class Program 
    { 
        
static void Main(string[] args) 
        { 
            
string strAddress = "net.tcp://localhost:2010/ChatService"
            ChannelFactory
<Service.IChatService> factory = new 
                ChannelFactory
<Service.IChatService>(Service.MyHost.GetBinding(), new EndpointAddress(strAddress)); 
            Service.IChatService service 
= factory.CreateChannel(); 
            service.SendMessage(
new Service.MessageInfo() { Message="哈哈",UserName="leon",PartnerName="mac" });
            var list 
= service.GetMessages("mac""leon");
            Console.WriteLine(
"mac跑去取了消息"+list[0].Message); 
            Console.Read(); 
        } 
    }

 

  

最近的考虑有几点,写下来记录一下

1,WCF可以利用VS自动建立的对象进行对象传递,与silverlight之间传递文本视频对象都没有问题,可以host到IIS或者console上,但是传递的效率相对比较低,如果host到console上,实际项目中使用部署和维护都有额外的工作。

2,socket做为聊天服务器的话,没有办法host到IIS中去,只能在console中或者应用程序上做,而且最重要的是socket传递数据如何对象化是个问题,比如传输视频,我可能需要在视频流的byte中加入视频的发送者和接收人来供服务器进行处理,视频流的组合也是问题,本来想利用socket来建立长连接或者定时不断的往服务器上发信息,聊天对方不停的去接收信息,但是这种方法怎么想都有点神经。。。






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





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Silverlight数据绑定/IValueConverter学习笔记
先回忆一下aspx中的处理: 在aspx中,可以直接在后台定义一个变量,然后前台就可以用来将其"绑定"html控件上,比如下面这样,实在是很方便: 代码 using System;namespace WebApplication1{    public partial class _Default : System.
671 0
PowerDesigner教程系列(五)概念数据模型
原文http://www.cnblogs.com/yxonline/archive/2007/04/11/708387.html 目标:本文主要介绍数据项、新增数据项、数据项的唯一性代码选项和重用选项等。
683 0
PowerDesigner教程系列(三)概念数据模型
原文http://www.cnblogs.com/yxonline/archive/2007/04/09/705718.html 目标:本文主要介绍属性的标准检查约束、如何定义属性的附加检查。一、定义属性的标准检查约束标准检查约束是一组确保属性有效的表达式。
782 0
使用PowerDesigner生成数据库测试数据
原文http://blog.csdn.net/horace20/article/details/6672081 特别说明:本文产生于个人工作总结,转载请注明原文出处http://blog.csdn.net/horace20 1、环境        PowerDesigner15.2.0.3042-BEAN+ MySQL5.5 + mysql-connector-odbc-5.1.8        以上软件在网上都很容易找到,这里就不再给出相关链接!系统环境为WindowsXP。
1029 0
PowerDesigner PDM表数据信息用表格展现
原文http://www.cnblogs.com/whitewolf/archive/2010/05/04/1726992.html       在前些日子,同事问我能不能把PowerDesigner的PDM 表信息表格来展现出来,如下面格式, 字段名 ...
643 0
PowerDesigner教程系列(六)概念数据模型
原文http://www.cnblogs.com/yxonline/archive/2007/04/12/710816.html   目标:本文主要介绍联系的定义及使用。  一、 联系联系(Relationship)是指实体集这间或实体集内部实例之间的连接。
700 0
PowerDesigner教程系列(四)概念数据模型
原文http://www.cnblogs.com/yxonline/archive/2007/04/11/708271.html   目标:本文主要介绍如何定义实体的主、次标识符。一、标识符标识符是实体中一个或多个属性的集合,可用来唯一标识实体中的一个实例。
647 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载