知识大全 WCF实现上传图片功能

Posted 文件

篇首语:捐躯赴国难,视死忽如归。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WCF实现上传图片功能相关的知识,希望对你有一定的参考价值。

WCF实现上传图片功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  功能介绍         主要是使用WCF框架实现从客户端上传图片到服务端并在服务端显示的基本功能         一 首先创建两Windows窗体应用程序 WinFormClient (客户端 发送端)和 WinFormReceiver (接收端)        如图设计FormClient(发送端窗体)的界面 上边是一个panel容器中添加了一个TextBox和 两个Button 下边是一个PictureBox控件(用于浏览上传之前的图片)

  

  然后添加浏览按钮下的后台代码 实现客户端浏览的功能         View Code        string fileName = ;//定义一个全局变量         //浏览选择上传内容        private void btnBrowser_Click(object sender EventArgs e)                //string fileName = ;//定义一个字段用于获取上传的文件名         OpenFileDialog openFileDialog = new OpenFileDialog() //创建一个OpenFileDialog对象专门用于打开文件        if (openFileDialog ShowDialog() == DialogResult OK)//打开的文件对话框如果选择了OK按钮(确定) 则为真 执行大括号中的内容                fileName = openFileDialog FileName;        txtPicName Text = fileName;//在textBox中显示文件名        pictureBox Load(fileName) //使该图片在客户端pictuBox中显示                else        return;//未选中文件则返回                 将WinFomClient设为启动项目 运行        当你选择图片后 该图片会显示在发送端的窗体中 供发送者浏览 如需更改上传图片可重新选取 该图片将会被覆蓋掉 (上传功能将在下文实现)        FormReceiver接收端的窗体只需添加一个PictureBox控件 用于显示客户端上传的图片    

    二 在解决方案中添加两个类库 ITransferPic(接口) TransferPic(继承接口) 一个控制台应用程序 TransferPicHost(宿主程序)         该实例采用的是 自身托管宿主 并非 IIS宿主         ITransferPic        ( ) 添加引用 using System ServiceModel;   using System IO;        ( ) 创建一个 ITransferPicService 接口        View Code        [ServiceContract]        public interface ITransferPicService                [OperationContract]//操作契约        Stream GetPic()         [OperationContract]        void SendPic(Stream transferPic)                 TransferPic        ( ) 添加引用 using ITransferPic;  using System IO;        ( ) 创建一个 TransferPicService 类 继承接口 ITransferPicService 并实现该接口         View Code        public class TransferPicService : ITransferPicService                public static Stream PicSource = new MemoryStream()         /// <summary>        /// 从服务端下载图片到本地 (上传和下载都是拷贝的过程)        /// </summary>        /// <returns></returns>        public Stream GetPic()                MemoryStream ms = new MemoryStream()         PicSource Position = ;//指明从第 位开始拷贝        PicSource CopyTo(ms) //服务端将客户端的Stream复制一份        ms Position = ;//注意如果缺少该条代码接收端将无法显示上传图片        return ms;//然后在返回客户端                 /// <summary>        /// 从客户端上传图片到服务端(将客户端的Stream拷贝给服务端的Stream)        /// </summary>        /// <param name= transferPic ></param>        public void SendPic(Stream transferPic)                PicSource Position = ;        transferPic CopyTo(PicSource)                         TransferPicHose        自身托管宿主 利用WCF提供的ServiceHost<T>提供的Open()和Close()方法 可以便于开发者在控制台应用程序 Windows应用程序乃至于ASP NET应用程序中托管服务 不管自宿主的环境是何种应用程序 实质上托管服务的方式都是一致的 如该实例中用到的代码部分         添加引用         using System ServiceModel;        using ITransferPic;        using System ServiceModel Description;        View Code        class Program                static void Main(string[] args)                NetTcpBinding bind = new NetTcpBinding()         bind MaxBufferSize = ;        bind TransferMode = TransferMode Streamed;        bind MaxReceivedMessageSize = ;        bind Security Mode = SecurityMode None;        //超出using 范围程序会自动释放        using (ServiceHost host = new ServiceHost(typeof(TransferPic TransferPicService)))                host AddServiceEndpoint(typeof(ITransferPicService) bind net tcp://localhost: /transferPic ) //该地址为宿主地址 和客户端接收端地址保持一致         if (host Description Behaviors Find<ServiceMetadataBehavior>() == null)                ServiceMetadataBehavior behavior = new ServiceMetadataBehavior()         behavior HttpGetEnabled = true;        behavior HttpGetUrl = new Uri(//localhost: /transferPic/metadata/ )         host Description Behaviors Add(behavior)                 host Opened += delegate Console WriteLine( 图片程序已成功启动! ) ;        host Open()         Console ReadLine()                                 三 实现上传         WinFormClient 后台上传按钮部分         添加引用         using System IO;        using System ServiceModel;        using ITransferPic;        View Code        //执行上传功能        private void btnUpload_Click(object sender EventArgs e)                //pictureBox Load(fileName)         //读取流 上传文件流到服务器        FileStream fs = new FileStream(fileName FileMode Open FileAccess Read) //创建一个文件 并把文件放在文件流里边         Stream sm = new MemoryStream() //创建一个滤层流 将文件从第 位拷贝到sm中        fs Position = ;//获取或设置此流的当前位置        fs CopyTo(sm)         //拷贝完成之后进行上传        EndpointAddress epAddr = new EndpointAddress( net tcp://localhost: /transferPic ) //此处也可以用IIS做服务        NetTcpBinding bind = new NetTcpBinding() //绑定方式        bind MaxBufferPoolSize = ;//最大缓冲        bind TransferMode = TransferMode Streamed;//传输模式为流式处理        bind MaxReceivedMessageSize = ;//定义了服务端接收Message的最大长度 防止文件过大        bind Security Mode = SecurityMode None;//安全模式设置为不进行验证         //创建一个工厂        ITransferPicService proxy = ChannelFactory<ITransferPicService> CreateChannel(bind epAddr)         sm Position = ;        proxy SendPic(sm) //WCF客户端调用该方法 把客户端sm上传到服务端去                 WinFormReceiver 后台         添加引用         using ITransferPic;        using System IO;        using System ServiceModel;        View Code        private void FormReceiver_Load(object sender EventArgs e)                Thread myThread = new Thread(ShowPic) //创建一个线程        myThread IsBackground = true;//设置后台线程(防止主程序关闭后 仍在运行)        myThread Start() //启动线程                public void ShowPic()                #region 同客户端一样 创建WCF客户端        EndpointAddress epAddr = new EndpointAddress( net tcp://localhost: /transferPic )         NetTcpBinding bind = new NetTcpBinding()         bind MaxBufferPoolSize = ;        bind TransferMode = TransferMode Streamed;        bind MaxReceivedMessageSize = ;        bind Security Mode = SecurityMode None;        //创建一个通道        ITransferPicService proxy = ChannelFactory<ITransferPicService> CreateChannel(bind epAddr)         #endregion        while (true)                Stream streamFromServer = proxy GetPic() //返回一个文件流         MemoryStream ms = new MemoryStream() //滤层流拷贝一份         ms Position = ;        streamFromServer CopyTo(ms) //将该文件流拷贝给到ms;        if (ms Length == )                System Threading Thread Sleep( ) // 百毫秒执行一次         continue;                Bitmap tn = new Bitmap(ms) //创建一个位图 把ms变成图片         pictureBox Image = tn;        System Threading Thread Sleep( ) // 百毫秒执行一次 Sleep表示当前线程挂起指定的时间                         四 运行程序         打开TransferPicHost 文件中bin目录 启动 TransferPicHost exe 此时会弹出一个控制台应用程序的窗体 并提示 图片功能已成功启动!         分别启动发送端和接收端项目程序         (将 WinFormClient 或者 WinFormReceiver 设为启动项目 并启动另一个项目文件夹bin目录下的 WinFormReceiver exe 或者 WinFormClient exe )        点击发送端 浏览按钮 进行选择图片 之后点击 上传按钮 这时 你会发现客户端上传的图片显示在了接收端的窗体上 程序运行成功 cha138/Article/program/net/201311/12342

相关参考

知识大全 ASP.NET入门教程 8.6 改善图片上传功能[1]

ASP.NET入门教程8.6改善图片上传功能[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 ASP.NET入门教程 8.6 改善图片上传功能[2]

ASP.NET入门教程8.6改善图片上传功能[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 我在百度提问的图片怎么上传不了呢

我在百度提问的图片怎么上传不了呢当问题/回答需要图片来加以辅助说明时,可选择插入图片功能。点选提问或回答页面输入框边上的“上传图片/插入图片”→“浏览”→选择图片→“确定”。注意:二级及以上使用者登入

知识大全 怎么样把自己的图片上传到百度上给大家下载当手机壁纸

怎么样把自己的图片上传到百度上给大家下载当手机壁纸首先你得找到,能够发布手机壁纸的网站,如果网站拥有注册以后发布图片的功能,你直接注册以后,按照流程操作就可以了。这类网站你可以通过,打开百度图片,搜索

知识大全 在百度点图片搜寻出来的图片是怎么上传上去的

在百度点图片搜寻出来的图片是怎么上传上去的?我也想上传?请高手指点谢谢!这没法上传他搜的图片都是别的网站上的根据图片的名字如果你想被搜到,可以上传到百度空间,注意图片描述要清楚,不过即使这样也不能保证

知识大全 为什么我的百度图片里面不能上传图片呢

为什么我的百度图片里面不能上传图片呢?别人的都有一个上传图片的按钮,怎么我的就没有呢?希望大神解答请问是电脑上的吗?百度图片可以上传图片寻找相似图片,步骤:进入百度图片,然后在搜寻栏右侧有个相机,就是

知识大全 我要上传图片到百度

我要上传图片到百度点击图片就可以上传了,只能传本地图片你好!要想让自己的照片在百度被搜到,具体方法如下首先你可以把照片上传到百度空间的公开相册里,就能在百度里通过搜索找到你的照片。进入百度图片:ima

知识大全 图片怎么能上传百度啊

图片怎么能上传百度啊?谁会啊?教教我!谢谢一、把照片上传到百度空间,网友即可在百度图片里搜寻照片关键词看到。进入百度地图片:image.baidu./→右上方“登入”→登入以后右上方“我的相簿”→右上

知识大全 php给上传图片加图片水印

 <formaction="<?=$_SERVER[PHP_SELF]?>"method="post"enctype="multipart/formdata"name=fo

知识大全 怎样在百度上传照片。详细方法

怎样在百度上传照片。详细方法如何插入图片图片插入步骤为:步骤一:准备图片在插入图片前,您需要在电脑上准备好图片。如果是网上的图片,需要先将图片存到电脑上。操作为将鼠标移至图片上,点击鼠标右键,选择“图