• WCF客户端从服务器下载数据


    1.打开VS选择控制台项目新建一个解决方案Server,然后添加两个类库Contract和Service.

    2.在Contract中添加一个接口IFileDownload

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    
    namespace Contract
    {
        [ServiceContract]
        public interface IFileDownload
        {
            [OperationContract]
            Dictionary<string, byte[]> DownloadFile(string[] fileNames);
        }
    }

    3.在Service中实现接口IFileDownload

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Contract;
    using System.IO;
    
    namespace Service
    {
        public class FileDownload : IFileDownload
        {
            public Dictionary<string, byte[]> DownloadFile(string[] fileNames)
            {
                Dictionary<string, byte[]> filedata = new Dictionary<string, byte[]>();
                string queryDirectory = AppDomain.CurrentDomain.BaseDirectory + "数据"; //假设服务器数据存放在运行目录下的“数据”文件夹中
                DirectoryInfo drtInfo = new DirectoryInfo(queryDirectory);
                FileInfo[] fileInfo = drtInfo.GetFiles();
                foreach (FileInfo item in fileInfo)
                {
                    foreach (string filename in fileNames)
                    {
                        if (filename == item.Name)
                        {
                            FileStream fsRead = new FileStream(queryDirectory+"\"+filename,FileMode.Open,FileAccess.Read);
                            byte[] bytDt = new byte[fsRead.Length];
                            fsRead.Read(bytDt,0,bytDt.Length);
                            fsRead.Close();
                            filedata.Add(filename,bytDt);
                            break;
                        }
                    }
                }
    
                return filedata;
            }
        }
    }

    3.在Server中添加如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using Service;
    
    namespace Server
    {
        class Program
        {
            static void Main(string[] args)
            {
                ServiceHost download_host = new ServiceHost(typeof(FileDownload));
                download_host.Open();
                Console.WriteLine("文件下载服务已启动");
                Console.Read();
            }
        }
    }

    4.在Server中添加一个应用程序配置文件App.xml,并选择菜单栏->工具->WCF服务配置编辑器对配置文件进行编辑,具体操作可参考http://www.cnblogs.com/judastree/archive/2012/08/26/2657555.html

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="DownloadFileBindingConfig" closeTimeout="20:56:00" openTimeout="20:30:00" sendTimeout="20:56:00" maxBufferSize="2073741824" maxReceivedMessageSize="2073741824" transferMode="Buffered" maxBufferPoolSize="2073741824" >
              <security mode="None">
                <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
                <message clientCredentialType="Windows"/>
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="DownloadBehavior">
              <serviceMetadata httpGetEnabled="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="Service.FileDownload" behaviorConfiguration="DownloadBehavior">
            <endpoint address="net.tcp://localhost:2310/Download" binding="netTcpBinding"
                bindingConfiguration="DownloadFileBindingConfig" contract="Contract.IFileDownload" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:2310" />
              </baseAddresses>
            </host>
          </service>
        </services>
      </system.serviceModel>
    </configuration>

    5.启动Server

    6.新建一个窗体应用程序的解决方案Client,添加服务引用

    7.修改Client的配置文件app.xml为

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <netTcpBinding>
                    <binding name="NetTcpBinding_IFileDownload" maxBufferSize="2073741824" maxReceivedMessageSize="2073741824">
                        <security mode="None" />
                    </binding>
                </netTcpBinding>
            </bindings>
            <client>
                <endpoint address="net.tcp://localhost:2310/Download" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBinding_IFileDownload" contract="ServiceReference1.IFileDownload"
                    name="NetTcpBinding_IFileDownload" />
            </client>
        </system.serviceModel>
    </configuration>

    8.添加一个TextBox和一个Button,在Button下添加代码

     private void button1_Click(object sender, EventArgs e)
            {
                ServiceReference1.FileDownloadClient fileDownload = new ServiceReference1.FileDownloadClient();
                List<string> filenames = new List<string>();
                filenames.Add(textBox1.Text); //为了简单,这里只查找一个文件
                Dictionary<string,byte[]>  downloadfiles = fileDownload.DownloadFile(filenames.ToArray());
                foreach (var item in downloadfiles)
                {
                    if (item.Value!=null)
                    {
                        FileStream fsWrite = new FileStream(@"C:UsersyujianDesktopDownloadFiles"+item.Key,FileMode.Create);//这里下载wav文件,可根据实际情况调整
                        fsWrite.Write(item.Value,0,item.Value.Length);
                        fsWrite.Close();
                    }
                }
                MessageBox.Show("下载成功");
            }

    9.运行结果

     源码

  • 相关阅读:
    Vue前端工程化
    Vue前端路由
    Vue前后端路由
    Vue组件化开发
    Vue基础
    订单列表和数据列表(七)
    商品列表和添加商品(六)
    商品分类管理和参数管理(五)
    给独立搭建的博客启用https的过程
    使用Gitalk实现静态页面评论的功能
  • 原文地址:https://www.cnblogs.com/144823836yj/p/5999973.html
Copyright © 2020-2023  润新知