实战演习-用wse上传下载文件

jillzhang jillzhang@126.com

     这几天,光忙着写程序员职场了,对wse的翻译和学习没有太大的进展,这可不太好,毕竟咱还是靠技术混饭吃的,荒废了技术怎么行!今天再上一盘有关wse的小菜,目的是想用wse实现大数据的传输。

    在wse框架结构中,能够使用Message Transmission Optimization Mechanism (MTOM) 协议来传输大数据,这在前文的翻译中也有提到,详细内容可以参见WSE 3.0 文档翻译:WSE的新功能 中的介绍。本文就是对用MTOM传输大数据做一个项目示例,主要解决用web service上传,下载文件的问题。

    实现本示例,需要三步:

     1) 创建asp.net xml web服务项目,并对其进行配置编码 

     2) 创建一个web服务的客户端应用程序,对其进行配置编码 

     3) 准备好测试文件,运行客户端程序,查看运行结果


  1. 创建asp.net xml web服务项目,并对其进行配置编码

    通过项目模板,创建一个传统的asp.net xml web service网站工程,在解决方案资源管理中右键点击该工程,选择wse 3.0 settting,进行如下图所示的操作

    此操作可以为项目添加对Microsoft.Web.Services3的引用,为项目能使用wse 3.0框架做出第一步设置

    添加引用之后,我们需要设置网络服务能够使用MTOM协议来进行消息传输,方法如下图所示,仍通过点击wse 3.0 settting,然后进行如下的配置

    这里我们可以将Server Mode设置为always或者optional,二者的区别如下:

    Optional(可选的): 不管经Wse处理的请求消息是否经过MTOM编码,Soap响应或者Soap错误都是经过MTOM编码的

    Always(总是):经wse处理的请求和响应一定要是MTOM编码的

    经过这个操作,会在web.config中增加如下的配置信息:

    在Service.asmx中添加代码

    Service端
    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.IO;

    [WebService(Namespace 
    = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
    = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        
    public Service () 
        }


        [WebMethod]
        
    public byte[] Send(string fileName) {
            
    string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
            
    if (!File.Exists(filePath))
            
    {
                
    throw new Exception(string.Format("文件:{0}不存在",filePath));
            }

            
    byte[] buffer = File.ReadAllBytes(filePath);
            
    return buffer;
        }

        [WebMethod]
        
    public bool Receive(byte[] buffer,string fileName)
        
    {
            
    string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
            File.WriteAllBytes(filePath, buffer);
            
    return false;
        }

    }

     

  2. 创建一个web服务的客户端应用程序,对其进行配置编码

    创建一个console程序,名为BinaryMTOMClient,也按1中所示添加Microsoft.Web.Services3的引用,然后设置MTOM选项,如下图所示:

    将Client Mode设置为On表示客户端允许将Soap消息进行MTOM编码。此操作会在app.config中增加如下配置信息:

    添加对上面1中创建的网络服务的web引用,然后将Programe代码更改如下:  

     

    Client端
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;

    namespace BinaryMTOMClient
    {
        
    public class Program:WseBase.AppBase
        
    {

            localhost.ServiceWse serviceProxy;
            
    public Program()
            
    {
                serviceProxy 
    = new BinaryMTOMClient.localhost.ServiceWse();
                ConfigureProxy(serviceProxy);
            }

        
            
    static void Main(string[] args)
            
    {
                Program p 
    = new Program();
                
    string fileName = "1.txt";
                p.Download(fileName);
                fileName 
    = "2.txt";
                p.Upload(fileName);
                Console.Read();
            }

            
    public void Download(string fileName)
            
    {
                
    try
                
    {
                    Console.WriteLine(
    "开始调用网络服务:"+serviceProxy.Url);
                    
    byte[] buffer = serviceProxy.Send(fileName);
                    Console.WriteLine(
    "接收到未加密的数据");
                    Console.WriteLine(
    "数据长度为:"+buffer.Length.ToString());
                    File.WriteAllBytes(fileName, buffer);
                    
                }

                
    catch (Exception ex)
                
    {
                    Console.WriteLine(ex.Message);               
                }

            }

            
    public void Upload(string fileName)
            
    {
                
    try
                
    {
                    
    string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
                    
    if (!File.Exists(filePath))
                    
    {
                        Console.WriteLine(
    string.Format("文件:{0}不存在", filePath));
                        
    return;
                    }

                    Console.WriteLine(
    "开始调用网络服务:" + serviceProxy.Url);     
                    
    byte[] buffer = File.ReadAllBytes(filePath);
                    serviceProxy.Receive(buffer, fileName);
                    Console.WriteLine(
    "发送未加密的数据");
                    Console.WriteLine(
    "数据长度为:" + buffer.Length.ToString());            
                }

                
    catch (Exception ex)
                
    {
                    Console.WriteLine(ex.Message);
                }

            }

        }

    }

     

  3. 准备好测试文件,运行客户端程序,查看运行结果

    在网络服务的根目录中,添加1.txt作为客户端要下载的文件资源,在客户端运行目录中添加2.txt,作为客户端要上传的文件资源,按下图所示,运行客户端:

    浏览网络服务根目录,新增了文件2.txt,而客户端运行目录,新增了文件1.txt,表示示例成功

  4. 示例项目:示例文件

转载于:https://www.cnblogs.com/jillzhang/archive/2008/01/14/1038223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis学习(28):获取自增id方式二(在全局中配置setting选项)

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

推荐一篇讲解各种debug技术的文章,相当不错!

讲述debug的各种工具和技巧的文章,相当不错 ! http://blog.csdn.net/agan4014/archive/2008/03/20/2199790.aspx 转载于:https://www.cnblogs.com/Winston/archive/2008/06/12/1218427.html

Linux下安装和配置solr/tomcat/IK分词器 详细实例一.

在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用. 注: 本文属于原创文章, 如若转载,请注明出处, 谢谢. 关于设置IK分词器的文章 IK分词器: Linux下IK分词器的安装及配置 1, 解压tar文件 首先我们在根…

【小虫虫】邮购笔记本的注意事项

最近很多网友问我从我这里买本本,怎么邮购。要是运输中磕了坏了丢了怎么办、小虫虫现在说一下。 问:我不在笔记本面前,我怎么验机? 虫:所有发货的笔记本虫虫都会亲自验机,帮助大家检测硬盘,检测…

mybatis学习(29):适用于没有自增的数据库

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

Configuate Mac OSX $PATH

转载于:https://www.cnblogs.com/SunWentao/archive/2008/06/20/1226975.html

Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

为了更好的排版, 所以将IK分词器的安装重启了一篇博文, 大家可以接上solr的安装一同查看. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://www.cnblogs.com/wang-meng/p/5814798.html 8, 打开浏览器查看solr可视化界面 到了这里solr就配置好了, 可是我…

理解正确的日志输出级别

原文链接:http://macrochen.iteye.com/blog/1399082 很多程序员都忽略了日志输出级别, 甚至不知道如何指定日志的输出级别. 相对于System.out来说, 日志框架有两个最大的优点就是可以指定输出类别(category)和级别(level). 对于日志输出级别来说, 下面是我们应该记住…

mybatis学习(30):修改功能

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

如何在textarea中显示html代码

XML/HTML代码<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <title>新建网页</title> </head> <body> <table border"1" width"100%" id&qu…

ElasticSearch初体验之使用Java进行最基本的增删改查

好久没写博文了&#xff0c; 最近项目中使用到了ElaticSearch相关的一些内容&#xff0c; 刚好自己也来做个总结。 现在自己也只能算得上入门&#xff0c; 总结下自己在工作中使用Java操作ES的一些小经验吧。 本文总共分为三个部分&#xff1a; 一&#xff1a;ES相关基本概念及…

mybatis学习(31):修改部分字段(有外键,先查询,再修改)

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

vb 垂直滚动条定位

Sub TreeFill3(cTime As String, ByVal cKey As String) Tree3.Nodes.Clear 循环填充tree1控件内容 Dim c As String Dim cNode As Node Dim cSql As String Dim cRec As rdoResultset Dim cRec1 As rdoResultset Dim i As Integer cS…

python运算符的优先级

运算符优先级 如果你有一个如2 3 * 4那样的表达式&#xff0c;是先做加法呢&#xff0c;还是先做乘法&#xff1f;我们的中学数学告诉我们应当先做乘法——这意味着乘法运算符的优先级高于加法运算符。 下面这个表给出Python的运算符优先级&#xff0c;从最低的优先级&#xf…

mybatis学习(32):删除操作

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

创业起步的十大准备步骤

导读 对于大多数首次创业者&#xff0c;创业起步如同小孩子刚刚开始学走路一样&#xff0c;资金可能并不会十分丰厚&#xff0c;再加上经验的缺失&#xff0c;形成了创业阶段的薄弱环节。因此&#xff0c;创业起步时一定要结合自身优势并在规划中下足功夫。 ⒈怎样寻找创业模…

git 常用命令备查

一.git 提交文件的流程git add -> git commit -> git push 暂存区 ->本地仓库-> 远程仓库 二. 常用git命令1.初始化git仓库命令 git init 2.添加用户和邮箱 $ git config --global user.name "wumginxm" $ git config --global user.email zhangsan25…

Hive笔记之JOIN的左外链接和右外链接

一 为什么要用左外表或者右外表 hive中对多个表联合操作时,总是按照从左到右顺序执行,.因为hive在对每行记录进行 操作时,它会尝试将较小的表缓存起来,然后扫描最大的那张表.因此需要保证在连续查询中的表的大小从左往右依次增加,否则当数据的量很大时,会大大降低hive的执行的…

mybatis学习(33):动态sql if

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

小程序·云开发实战 - 体重记录小程序

前一段看到朋友圈里总是有人用txt记录体重&#xff0c;就特别想写一个记录体重的小程序&#xff0c; 现在小程序的云开发有云函数、数据库&#xff0c;真的挺好用&#xff0c;很适合个人开发者&#xff0c;服务器域名什么都不用管&#xff0c;云开发让你完全不用操心这些东西。…