WCF是一个使用了托管代码建立的统一框架。它的应用可以帮助开发者创建一个安全性高,可依赖性的解决方案。那么今天,我们将会在这里为大家详细介绍一下其中WCF消息处理的相关概念。

创新互联公司服务项目包括禹王台网站建设、禹王台网站制作、禹王台网页制作以及禹王台网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,禹王台网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到禹王台省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架
WCF消息处理:使用流数据传输文件,减少内存开销。
示例
1、WCF消息处理之服务
- IStreamed.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Linq;
 - using System.Text;
 - using System.ServiceModel;
 - using System.IO;
 - namespace WCF.ServiceLib.Message
 - {
 - /**//// < summary>
 - /// 消息契约(定义与 SOAP 消息相对应的强类型类)
 - /// < /summary>
 - [MessageContract]
 - public class FileWrapper
 - {
 - /**//// < summary>
 - /// 指定数据成员为 SOAP 消息头
 - /// < /summary>
 - [MessageHeader]
 - public string FilePath;
 - /**//// < summary>
 - /// 指定将成员序列化为 SOAP 正文中的元素
 - /// < /summary>
 - [MessageBodyMember]
 - public Stream FileData;
 - }
 - /**//// < summary>
 - /// IStreamed接口
 - /// < /summary>
 - [ServiceContract]
 - public interface IStreamed
 - {
 - /**//// < summary>
 - /// 上传文件
 - /// < /summary>
 - /// < remarks>
 - /// 1、支持数据流传输的绑定有:BasicHttpBinding、NetTcpBinding
 
和 NetNamedPipeBinding- /// 2、流数据类型必须是可序列化的 Stream 或 MemoryStream
 - // /3、传递时消息体(Message Body)中不能包含其他数据,即参数中只能有一个
 
System.ServiceModel.MessageBodyMember- /**//// < /remarks>
 - /// < param name="fileWrapper">WCF.ServiceLib.Message.FileWrapper< /param>
 - [OperationContract]
 - void UploadFile(FileWrapper fileWrapper);
 - }
 - }
 - Streamed.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Linq;
 - using System.Text;
 - using System.ServiceModel;
 - using System.IO;
 - namespace WCF.ServiceLib.Message
 - {
 - /**//// < summary>
 - /// IStreamed类
 - /// < /summary>
 - public class Streamed : IStreamed
 - {
 - /**//// < summary>
 - /// 上传文件
 - /// < /summary>
 - /// < param name="fileWrapper">WCF.ServiceLib.Message.
 
FileWrapper< /param>- public void UploadFile(FileWrapper fileWrapper)
 - {
 - var sourceStream = fileWrapper.FileData;
 - var targetStream = new FileStream(fileWrapper.FilePath,
 - FileMode.Create,
 - FileAccess.Write,
 - FileShare.None);
 - var buffer = new byte[4096];
 - var count = 0;
 - while ((count = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
 - {
 - targetStream.Write(buffer, 0, count);
 - }
 - targetStream.Close();
 - sourceStream.Close();
 - }
 - }
 - }
 
#p#
2、WCF消息处理之宿主
- Streamed.cs
 - using (ServiceHost host = new ServiceHost(typeof
 
(WCF.ServiceLib.Message.Streamed)))- {
 - host.Open();
 - Console.WriteLine("服务已启动(WCF.ServiceLib.Message.Streamed)");
 - Console.WriteLine("按< ENTER>停止服务");
 - Console.ReadLine();
 - }
 - App.config
 - < ?xml version="1.0" encoding="utf-8" ?>
 - < configuration>
 - < system.serviceModel>
 - < services>
 - < !--name - 提供服务的类名-->
 - < !--behaviorConfiguration - 指定相关的行为配置-->
 - < service name="WCF.ServiceLib.Message.Streamed"
 
behaviorConfiguration="MessageBehavior">- < !--address - 服务地址-->
 - < !--binding - 通信方式-->
 - < !--contract - 服务契约-->
 - < !--bindingConfiguration - 指定相关的绑定配置-->
 - < endpoint address="Message/Streamed" binding="netTcpBinding"
 
contract="WCF.ServiceLib.Message.IStreamed"
bindingConfiguration="StreamedBindingConfiguration" />- < endpoint address="mex" binding="mexHttpBinding"
 
contract="IMetadataExchange" />- < host>
 - < baseAddresses>
 - < add baseAddress="http://localhost:12345/Message/Streamed/"/>
 - < add baseAddress="net.tcp://localhost:54321/"/>
 - < /baseAddresses>
 - < /host>
 - < /service>
 - < /services>
 - < behaviors>
 - < serviceBehaviors>
 - < behavior name="MessageBehavior">
 - < !--httpGetEnabled - 使用get方式提供服务-->
 - < serviceMetadata httpGetEnabled="true" />
 - < serviceDebug includeExceptionDetailInFaults="true"/>
 - < /behavior>
 - < /serviceBehaviors>
 - < /behaviors>
 - < bindings>
 - < netTcpBinding>
 - < !--transferMode - 指示通道是使用流处理模式还是缓冲模式来传输请求和响应消息-->
 - < !--maxReceivedMessageSize -
 
在采用此绑定配置的通道上可接收的***消息大小(单位:字节)-->- < !--receiveTimeout - 在传输引发异常之前可用于完成读取操作的时间间隔-->
 - < binding name="StreamedBindingConfiguration" transferMode="Streamed"
 
maxReceivedMessageSize="1073741824" receiveTimeout="00:10:00" />- < /netTcpBinding>
 - < /bindings>
 - < /system.serviceModel>
 - < /configuration>
 
3、WCF消息处理之客户端
- Streamed.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Linq;
 - using System.Text;
 - using System.Windows.Forms;
 - using System.ServiceModel;
 - using System.IO;
 - namespace Client2.Message
 - {
 - /**//// < summary>
 - /// 演示Message.Streamed的类
 - /// < /summary>
 - public class Streamed
 - {
 - /**//// < summary>
 - /// 流数据上传文件
 - /// < /summary>
 - /// < param name="source">源文件地址< /param>
 - /// < param name="destination">目标路径< /param>
 - public void HelloStreamed(string source, string destination)
 - {
 - try
 - {
 - var proxy = new MessageSvc.Streamed.StreamedClient();
 - var sr = new System.IO.FileStream(
 - source, System.IO.FileMode.Open);
 - proxy.UploadFile(destination + Path.GetFileName(source), sr);
 - sr.Close();
 - proxy.Close();
 - MessageBox.Show("上传成功");
 - }
 - catch (Exception ex)
 - {
 - MessageBox.Show(ex.ToString());
 - }
 - }
 - }
 - }
 - App.config
 - < ?xml version="1.0" encoding="utf-8" ?>
 - < configuration>
 - < system.serviceModel>
 - < client>
 - < !--address - 服务地址-->
 - < !--binding - 通信方式-->
 - < !--contract - 服务契约-->
 - < endpoint address="net.tcp://localhost:54321/Message/Streamed"
 
binding="netTcpBinding" contract="MessageSvc.Streamed.IStreamed"
bindingConfiguration="StreamedBindingConfiguration" />- < /client>
 - < bindings>
 - < netTcpBinding>
 - < !--transferMode - 指示通道是使用流处理模式还是缓冲模式来传输请求和响应消息-->
 - < !--sendTimeout - 在传输引发异常之前可用于完成写入操作的时间间隔-->
 - < binding name="StreamedBindingConfiguration"
 
transferMode="Streamed" sendTimeout="00:10:00" />- < /netTcpBinding>
 - < /bindings>
 - < /system.serviceModel>
 - < /configuration>
 
以上就是对WCF消息处理的相关概念介绍。
                网站名称:WCF消息处理分布剖析
                
                标题路径:http://www.csdahua.cn/qtweb/news10/39510.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网