c#——WCF和HTTP文件传输实验

这篇具有很好参考价值的文章主要介绍了c#——WCF和HTTP文件传输实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(1)掌握HTTP协议下WCF服务应用程序构建方法。
(2)掌握WCF客户端和服务端的消息交换模式。
(3)掌握协定的设计及实现方法。
(4)熟悉WCF和HTTP的相关绑定设置。
(5)掌握流的读写操作方法。

在同一个解决方案中,分别编写服务端程序和客户端程序,利用HTTP和流传输实现文件下载功能。客户端程序运行效果如图A-4所示。

c#——WCF和HTTP文件传输实验

 具体要求
(1)基本功能:文件下载(必做)。
(2)功能扩展:文件上传(选做)。

重点:掌握HTTP协议下WCF服务应用程序构建方法;掌握WCF客户端和服务端的消息交换模式;掌握协定的设计及实现方法;熟悉WCF和HTTP的相关绑定设置。
难点:掌握协定的设计及实现方法;

MainWindow.xaml

Window x:Class="shiyan4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:shiyan4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <GroupBox Grid.Row="0" Header="请选择可下载的文件">
            <ListBox x:Name="lb1"/>
        </GroupBox>
        <Border Grid.Row="1" Background="Beige" Padding="0 5 0 5">
            <Button x:Name="btnDownload" Content="开始下载" Width="100" Height="19" VerticalAlignment="Top" Click="btnDownload_Click"/>
        </Border>
        <GroupBox Grid.Row="2" Header="下载信息">
            <ScrollViewer>
                <StackPanel TextBlock.LineHeight="20">
                    <TextBlock x:Name="tb1" TextWrapping="Wrap" Margin="0 10 0 0"/>
                </StackPanel>
            </ScrollViewer>
        </GroupBox>
    </Grid>
</Window>

c#——WCF和HTTP文件传输实验

 MainWindow.xaml.cs

using ServiceReference1;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace shiyan4
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
        }

        String[] info;

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Service1Client client=new Service1Client();
            info = client.getFilesInfo();
            foreach (String file in info)
            {
                String[] s = file.Split(",");
                Label label = new Label();
                label.Content = String.Format("文件名:{0},文件长度:{1}字节", s[0], s[1]) ;
                lb1.Items.Add(label) ;
            }
            client.Close();
            if(lb1.Items.Count > 0)
            {
                lb1.SelectedIndex = 0;
                btnDownload.IsEnabled = true;
            }
            else 
            {
                btnDownload.IsEnabled = false;
                addInfo("找不到可以下载的文件!");
            }

        }



        private void addInfo(String info)
        {
            tb1.Text += info;
            tb1.Text += Environment.NewLine;
        }

        private void btnDownload_Click(object sender, RoutedEventArgs e)
        {
            tb1 .Text = "";
            String[] a = info[lb1.SelectedIndex].Split(",");
            addInfo(String.Format("正在下载{0}", a[0]));
            ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
            Stream stream = client.DownloadStream(a[0]);
            String path=System.IO.Path.Combine(Environment.CurrentDirectory, a[0]);
            streamToFile(stream, path);
        }

        private void streamToFile(Stream stream,String path)
        {
            const int BUFSIZE = 4096;
            byte[] buffer = new byte[BUFSIZE];
            FileStream fileStream = File.Open(path, FileMode.Create, FileAccess.Write);
            int count=0;
            int all = 0;
            while ((count = stream.Read(buffer, 0, BUFSIZE)) > 0)
            {
                fileStream.Write(buffer, 0, count);
                all += count;
            }
            stream.Close();
            fileStream.Close();
            addInfo(String.Format("下载完成,共下载{0}字节,文件保存到{1}", all, path));
        }  
    }
}

IService1.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService1
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        List<String> getFilesInfo();
        [OperationContract]
        Stream DownloadStream(string fileName);
        // TODO: 在此添加您的服务操作
    }
}

Service1.svc

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService1
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。
    // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。
    public class Service1 : IService1
    {
        public static List<String> filesInfo;
        public static String path;

        public Stream DownloadStream(string fileName)
        {
            String filePath=Path.Combine(path, fileName);
            FileStream fileStream=File.OpenRead(filePath);
            return fileStream;
        }

        public List<string> getFilesInfo()
        {
            if (filesInfo == null)
            {
                filesInfo = new List<String>();
                path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadFiles");
                DirectoryInfo directoryInfo = new DirectoryInfo(path);
                var f = directoryInfo.EnumerateFiles();
                foreach ( var f2 in f)
                {
                    //格式:文件名,以字节为单位的文件长度
                    filesInfo.Add(String.Format("{0},{1}",f2.Name,f2.Length));
                }
            }
            return filesInfo;
        }
    }
}

Web.config(这里是添加的配置文件)

<bindings>
		  <basicHttpBinding>
			  <binding name="b1" transferMode="Buffered" textEncoding="utf-8" messageEncoding="Text">
				  <security mode="None"/>
			  </binding>
		  </basicHttpBinding>
	  </bindings>
  <!--  <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>  -->
	  <services>
		  <service name="WcfService1.Service1">
			  <endpoint binding="basicHttpBinding" bindingConfiguration="b1" contract="WcfService1.IService1"/>
		  </service>
	  </services>

写一下午了,累翻了,想死。文章来源地址https://www.toymoban.com/news/detail-470538.html

到了这里,关于c#——WCF和HTTP文件传输实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python搭建http文件服务器实现手机电脑文件传输功能

    本文介绍了如何使用Python搭建一个简单的HTTP文件服务器,支持GET、HEAD和POST请求,实现手机与电脑之间的文件传输功能。文中包含详细的代码示例和说明,帮助你轻松搭建并运行HTTP文件服务器。

    2024年02月12日
    浏览(52)
  • WebDav协议相关软件@简单配置局域网内的http和WebDav服务器和传输系统

    windows自带 IIS webdav windows自带的服务,启用相关功能后还要进行一系列的配置 而且在WebDav客户端上传到站点的文件大小存在限制问题 总体体验并不好,因此推荐第三方专业软件,灵活而且易于配置 第三方软件 CuteHttpFileServer | iscute.cn👺 提供了windos端的命令行程序和图形界面程序

    2024年01月21日
    浏览(41)
  • 计网实验七:应用层协议服务配置(DNS,HTTP,FTP)

    1.配置DNS服务器 2.HTTP服务器(可以用配置Tomcat 替代,需要能进入管理界面,即点击\\\"Manager App\\\"图标后能正常跳转到另一个界面) 3.配置FTP服务器 我是用的VMware WorkStation Pro 16.2.3 VMware官网 下了之后别乱动,先下镜像 我用的是windows server 2019 不知道是不是官网,反正下得挺慢的

    2024年02月11日
    浏览(35)
  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(60)
  • Mojo:为Web应用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客户端、HTTP服务器、配置文件管理等功能

            Mojo是一种高级的、动态的Perl Web应用程序框架,它可以用来开发Web应用程序,定位于速度、简单和可扩展性。Mojo的设计理念是简洁、灵活、易用和高效,它为Web应用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客户端、HTTP服务器、配置文件管理等

    2024年02月09日
    浏览(49)
  • 计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

    之前我们讲运输层的时候已经讲了运输层可以给不同进程之间通信,但我们还需要应用层原因是,许多 应用需要多个进程之间相互配合完成,所以应用层进程用来约束这些配合! 每个应用层协议用来解决一个问题 应用层的许多协议都是基于客户服务器方式 客户是请求方,服

    2024年01月24日
    浏览(48)
  • 使用python快速搭建HTTP服务实现局域网网页浏览或文件传输

    你可以借助Python的 http.server 模块。以下是在命令行中使用Python快速搭建HTTP服务器的步骤: 打开命令提示符(CMD)。 进入你想要共享文件的目录。使用 cd 命令来切换到目标目录,例如: 在目标目录下运行以下命令: 如果你的系统中同时安装了Python 2.x 和 Python 3.x,你可能需

    2024年02月13日
    浏览(31)
  • sftp和scp协议,哪个传大文件到服务器传输速率快?

    1.Win scp 6.1.1 2.XFTP 7 3.9.6G压缩文件 4.Centos 7 5.联想E14笔记本Win10 6.HW-S1730S-S48T4S-A交换机 sftp和scp协议,哪个传大文件到服务器速度快? 1.使用Win scp 上传9.6G压缩文件到Centos服务器 2.使用XFTP 上传9.6G压缩文件到Centos服务器 3.电脑网线直连服务器

    2024年02月05日
    浏览(47)
  • RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术

    在当今的互联网时代,流媒体传输技术在人们的日常生活中扮演着越来越重要的角色。从在线教育到实时娱乐,流媒体技术已经渗透到了生活的方方面面。在这篇博客中,我们将从C++语言的角度,探讨流媒体传输技术的重要性,为什么选择RTMP协议以及RTMP协议的发展与应用。

    2023年04月26日
    浏览(76)
  • HTTP协议安全传输教程

    HTTP协议有多个版本,包括但不限于HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。这些版本各自具有不同的特点和改进,以适应网络技术的发展和满足不同的需求。例如,HTTP/1.0使用文本格式传输数据,简单易用且兼容性好,但性能较低,每个请求都需要建立和关闭TCP连接。而HTTP/2则

    2024年04月27日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包