wcf全面解析proj1企业内部交流平台.ppt

上传人:tia****nde 文档编号:2721104 上传时间:2019-11-29 格式:PPT 页数:38 大小:2.74MB
返回 下载 相关 举报
wcf全面解析proj1企业内部交流平台.ppt_第1页
第1页 / 共38页
wcf全面解析proj1企业内部交流平台.ppt_第2页
第2页 / 共38页
wcf全面解析proj1企业内部交流平台.ppt_第3页
第3页 / 共38页
点击查看更多>>
资源描述
BF-TECH 4.0 DNET 软件开发工程师高薪就业品牌课程 版权所有:北风网,使用WCF搭建企业通用架构 讲师:石曼迪,项目案例1:企业内部交流平台,目录,内部交流平台需求 内部交流平台技术选型 内部交流平台设计 内部交流平台实现 内部交流平台演示 内部交流平台项目总结,目标,熟悉WCF开发 了解WPF开发 了解通信原理,项目成果展示,项目成果展示,内部交流平台背景,衡量沟通效果的四个指标:方便性、及时性、有效性、可追溯性。先看一下我们对各种沟通方式的对比分析: 面对面沟通; 电话沟通; Email电子邮件; IM即时通讯;,内部交流平台背景,我们需要沟通 我们能实现及时沟通,内部交流平台技术选型,内部交流平台技术选型,套接字编程? 不要 复杂的配置? 不要 开发成本高? 不要 维护性能差? 不要 平台兼容性不好? 不要 扩展性差? 不要 协议单一? 不要 那我们要啥? WCF能够满足这些要求!,内部交流平台设计,采用WCF服务端+客户端方式; 通过TCP/IP通信协议; 采用WPF界面开发(设备无关性); 采用ServiceThrottlingBehavior高性能配置建议;,内部交流平台实现:服务端,采用HTTP和TCP/IP两种协议进行通讯 采用WPF应用程序作为宿主 端口IP自配置,内部交流平台实现:服务端,类图,内部交流平台实现:服务端,类图,内部交流平台实现:服务端,界面实现,Local IP: Listen Port: Stop Start Status Chat Service,内部交流平台实现:服务端,引用程序集,内部交流平台实现:服务端,定义一个服务: 设置文件传输参数,Uri httpAdrs = new Uri(“http:/“ + textBoxIP.Text.ToString() + “:“ + (int.Parse(textBoxPort.Text.ToString() + 1).ToString() + “/WPFHost/“); Uri baseAdresses = tcpAdrs, httpAdrs ; host = new ServiceHost(typeof(ServiceAssembly.ChatService), baseAdresses);,NetTcpBinding tcpBinding = new NetTcpBinding(SecurityMode.None, true); /设置文件传输最大为 64 MB tcpBinding.MaxBufferPoolSize = (int)67108864; tcpBinding.MaxBufferSize = 67108864; tcpBinding.MaxReceivedMessageSize = (int)67108864; tcpBinding.TransferMode = TransferMode.Buffered; tcpBinding.ReaderQuotas.MaxArrayLength = 67108864; tcpBinding.ReaderQuotas.MaxBytesPerRead = 67108864; tcpBinding.ReaderQuotas.MaxStringContentLength = 67108864;,内部交流平台实现:服务端,打开优化配置: 设置保持连接,ServiceThrottlingBehavior throttle; throttle = host.Description.Behaviors.Find(); if (throttle = null) throttle = new ServiceThrottlingBehavior(); throttle.MaxConcurrentCalls = 100; throttle.MaxConcurrentSessions = 100; host.Description.Behaviors.Add(throttle); ,/保持连接 20 hours. tcpBinding.ReceiveTimeout = new TimeSpan(20, 0, 0); tcpBinding.ReliableSession.Enabled = true; tcpBinding.ReliableSession.InactivityTimeout = new TimeSpan(20, 0, 10); host.AddServiceEndpoint(typeof(ServiceAssembly.IChat), tcpBinding, “tcp“);,内部交流平台实现:服务端,开启服务:,try host.Open(); catch (Exception ex) labelStatus.Content = ex.Message.ToString(); finally if (host.State = CommunicationState.Opened) labelStatus.Content = “Opened“; buttonStop.IsEnabled = true;,内部交流平台实现:服务端,测试服务:,http:/localhost:7998/WPFHost/,内部交流平台实现:服务端,配置文件:,内部交流平台实现:客户端,采用WPF应用程序作为客户端表现: 增加头像和文件传输,内部交流平台实现:客户端,增加服务引用 net.tcp:/localhost:7996/WPFHost/mex,内部交流平台实现:客户端,界面实现:,内部交流平台实现:客户端,定义事件: 定义客户端集合,this.Loaded += new RoutedEventHandler(Window1_Loaded); chatListBoxNames.SelectionChanged += new SelectionChangedEventHandler(chatListBoxNames_SelectionChanged); chatTxtBoxType.KeyDown += new KeyEventHandler(chatTxtBoxType_KeyDown); chatTxtBoxType.KeyUp += new KeyEventHandler(chatTxtBoxType_KeyUp);,Dictionary OnlineClients = new Dictionary();,内部交流平台实现:客户端,定义状态判断:,if (proxy != null) switch (this.proxy.State) case CommunicationState.Closed: proxy = null; loginButtonConnect.IsEnabled = true; break; case CommunicationState.Closing: break; case CommunicationState.Created: break; case CommunicationState.Faulted: proxy.Abort(); break; case CommunicationState.Opened: ShowLogin(false); break; case CommunicationState.Opening: break;,内部交流平台实现:客户端,建立客户端连接:,string servicePath = . proxy.Endpoint.Address = . proxy.Open(); proxy.InnerDuplexChannel.Faulted += new EventHandler(InnerDuplexChannel_Faulted); proxy.InnerDuplexChannel.Opened += new EventHandler(InnerDuplexChannel_Opened); proxy.InnerDuplexChannel.Closed += new EventHandler(InnerDuplexChannel_Closed); proxy.ConnectAsync(this.localClient); proxy.ConnectCompleted += new EventHandler(proxy_ConnectCompleted);,内部交流平台实现:客户端,消息发送:,if (bool)chatCheckBoxWhisper.IsChecked) if (this.receiver != null) proxy.WhisperAsync(msg, this.receiver); chatTxtBoxType.Text = “; chatTxtBoxType.Focus(); else proxy.SayAsync(msg); chatTxtBoxType.Text = “; ,内部交流平台实现:客户端,添加头像:,Dictionary images = new Dictionary(); int i = 0; foreach (Stream strm in picsStrm) PngBitmapDecoder decoder = new PngBitmapDecoder(strm, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); BitmapSource bitmap = decoder.Frames0 as BitmapSource; Image img = new Image(); img.Source = bitmap; img.Stretch = Stretch.UniformToFill; images.Add(i, img); i+; strm.Close(); return images;,内部交流平台实现:客户端,文件发送:,OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = false; strm = fileDialog.OpenFile(); if (strm != null) byte buffer = new byte(int)strm.Length; int i = strm.Read(buffer, 0, buffer.Length); if (i 0) SVC.FileMessage fMsg = new FileMessage(); fMsg.FileName = fileDialog.SafeFileName; fMsg.Sender = this.localClient.Name; fMsg.Data = buffer; proxy.SendFileAsync(fMsg, this.receiver); proxy.SendFileCompleted += new EventHandler(proxy_SendFileCompleted); chatLabelSendFileStatus.Content = “Sending.“; ,内部交流平台实现:客户端,文件接收:,try FileStream fileStrm = new FileStream(rcvFilesPath + fileMsg.FileName, FileMode.Create, FileAccess.ReadWrite); fileStrm.Write(fileMsg.Data, 0, fileMsg.Data.Length); chatLabelSendFileStatus.Content = “Received file, “ + fileMsg.FileName; catch (Exception ex) chatLabelSendFileStatus.Content = ex.Message.ToString(); ,内部交流平台实现:客户端,用户登录和注销:,public void UserJoin(WPFClient.SVC.Client client) ListBoxItem item = MakeItem(client.AvatarID, “- “ + client.Name + “ joined chat -“); chatListBoxMsgs.Items.Add(item); ScrollViewer sv = FindVisualChild(chatListBoxMsgs); sv.LineDown(); ,public void UserLeave(WPFClient.SVC.Client client) ListBoxItem item = MakeItem(client.AvatarID, “- “ + client.Name + “ left chat -“); chatListBoxMsgs.Items.Add(item); ScrollViewer sv = FindVisualChild(chatListBoxMsgs); sv.LineDown(); ,内部交流平台实现:客户端,配置文件:,内部交流平台演示,内部交流平台项目总结,为什么要使用 net.tcp 绑定 为了更好地实现双向通信,.NET Framework在 3.0的时候引入了一个全新 的通信协议Net.TCP并作为WCF的一部分。它极大地改进了吞吐量 和连接的数量。 WCF服务寄宿方式 WCF服务寄宿方式:通过自我寄宿的方式寄宿服务和通过IIS寄宿服务服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或多个终结点,使之暴露给潜给的服务消费者。服务消费者最终通过相匹配的终结点对该服务进行调用。,总结,WCF通信技术 WPF开发技术 WCF通信优化技术,WCF视频教程:使用WCF搭建企业通用架构 学习地址:,欢迎访问我们的官方网站 ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!