当前位置:编程学习 > asp >>

WCF实现上传图片功能

功能介绍:

主要是使用WCF框架实现从客户端上传图片到服务端并在服务端显示的基本功能。

一、首先创建两Windows窗体应用程序“WinFormClient”(客户端、发送端)和“WinFormReceiver”(接收端)

1、如图设计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中显示文件名
                pictureBox1.Load(fileName);//使该图片在客户端pictuBox中显示
            }
            else
                return;//未选中文件则返回;
        }
 
将WinFomClient设为启动项目,运行
当你选择图片后,该图片会显示在发送端的窗体中,供发送者浏览,如需更改上传图片可重新选取,该图片将会被覆盖掉。(上传功能将在下文实现)
2、FormReceiver接收端的窗体只需添加一个PictureBox控件,用于显示客户端上传的图片。
二、在解决方案中添加两个类库:ITransferPic(接口)、TransferPic(继承接口),一个控制台应用程序 TransferPicHost(宿主程序);
该实例采用的是“自身托管宿主”并非“IIS宿主”。
1、ITransferPic
(1)、添加引用:using System.ServiceModel;   using System.IO;
(2)、创建一个“ITransferPicService”接口
  View Code
 
[ServiceContract]
    public interface ITransferPicService
    {
        [OperationContract]//操作契约
        Stream GetPic();
        [OperationContract]
        void SendPic(Stream transferPic);
    }
 
 
2、TransferPic
(1)、添加引用:using ITransferPic;  using System.IO;
(2)、创建一个“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 = 0;//指明从第0位开始拷贝
            PicSource.CopyTo(ms);//服务端将客户端的Stream复制一份
            ms.Position = 0;//注意如果缺少该条代码接收端将无法显示上传图片
            return ms;//然后在返回客户端;
        }

        /// <summary>
        /// 从客户端上传图片到服务端(将客户端的Stream拷贝给服务端的Stream)
        /// </summary>
        /// <param name="transferPic"></param>
        public void SendPic(Stream transferPic)
        {
            PicSource.Position = 0;
            transferPic.CopyTo(PicSource);
        }
    }
 
 
3、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 = 214783647;
            bind.TransferMode = TransferMode.Streamed;
            bind.MaxReceivedMessageSize = 214783647;
            bind.Security.Mode = SecurityMode.None;

            //超出using 范围程序会自动释放
            using (ServiceHost host = new ServiceHost(typeof(TransferPic.TransferPicService)))
            {
                host.AddServiceEndpoint(typeof(ITransferPicService), bind, "net.tcp://localhost:9600/transferPic");//该地址为宿主地址,和客户端接收端地址保持一致
                if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                {
                    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
 &

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,