如何通过webservice上传文件批量上传多个大文件

1569人阅读
在网上找了一下资料,用WebService进行大量数据传送的人并不多,主要原因是因为传送速度慢,因为WebService是以XML文件流的方式来传送的,写过XML的人都知道,XML中会有很多冗余的内容,比说字段名,他是每一行就要写一次,如果有约束,还要附加很多描述语句,而且从WebService返回数据时,还要进行64位编码,所以用WebService进行通迅效率很低.找了好久终于找到了一位高手的文章,原来WebService可以通过三步瘦身,但他用的方法是VS2003+wse2.0,而我用的是Vs2008+Wse3.0写法有所不同,于是写下此日志,帮助自己记录,也希望帮到有相关需求的人.
1.将DataSet设置为用于远程传送的精简二进制模式2.用压缩程序对数据进行压缩(此处使用微软提供的ICSharpCode.SharpZipLib.dll)3.使用WSE3.0的MTOM技术优化SOAP.WSE3.0配置:
安装完WSE3.0后,你会发现安装目录下会有一个WebService3.dll,要将其引入到WebService项目中(不能像VS2005中可以直接创建一个WSE3.0的项目),然后要配置Web.config,置于具体的配置写法可以用Wse3.0安装目录下的WseConfigEditor3.exe进行配置,例如要开通MTOM,则先在General页中勾选Enable this project for Web Service Enhancements,再在Messaging页中Client Mode选择on 然后关闭程序,会提示生成配置文件,打开文件,将相关项目填回Web.config中就可以使用了.
具体Web.config内容如下
&?xml version="1.0" encoding="utf-8"?&
&configuration&
&configSections&
&section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf" /&
&/configSections&
&system.web&
&webServices&
&soapExtensionImporterTypes&
&add type="Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf" /&
&/soapExtensionImporterTypes&
&soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf" /&
&/webServices&
&compilation&
&assemblies&
&add assembly="Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF" /&
&/assemblies&
&/compilation&
&/system.web&
&microsoft.web.services3&
&messaging&
&mtom clientMode="On" /&
&/messaging&
&/microsoft.web.services3&
&/configuration&
一.压缩类:
using System.IO;
using System.T
using ICSharpCode.
using ICSharpCode.pression.S
namespace ClassLb1
/// &summary&
/// 压缩强度。
/// &/summary&
public enum CompressionLevel
/// &summary&
/// 采用最好的压缩率。
/// &/summary&
BestCompression,
/// &summary&
/// 采用默认的压缩率。
/// &/summary&
DefaultCompression,
/// &summary&
/// 采用最快的压缩速度。
/// &/summary&
BestSpeed,
/// &summary&
/// 不采用任何压缩。
/// &/summary&
NoCompression
/// &summary&
/// CompressionHelper 的摘要说明。
/// &/summary&
public class CompressionHelper
/// &summary&
/// 获取和设置压缩强度。
/// &/summary&
public CompressionLevel L
public CompressionHelper()
Level = CompressionLevel.DefaultC
public CompressionHelper(CompressionLevel level)
#region Public Methods
/// &summary&
/// 从原始字节数组生成已压缩的字节数组。
/// &/summary&
/// &param name="bytesToCompress"&原始字节数组。&/param&
/// &returns&返回已压缩的字节数组&/returns&
public byte[] CompressToBytes(byte[] bytesToCompress)
MemoryStream ms = new MemoryStream();
Stream s = GetOutputStream(ms);
s.Write(bytesToCompress, 0, bytesToCompress.Length);
s.Close();
return ms.ToArray();
/// &summary&
/// 从已压缩的字节数组生成原始字节数组。
/// &/summary&
/// &param name="bytesToDecompress"&已压缩的字节数组。&/param&
/// &returns&返回原始字节数组。&/returns&
public byte[] DecompressToBytes(byte[] bytesToDecompress)
byte[] writeData = new byte[4096];
//设置缓冲区
Stream s2 = GetInputStream(new MemoryStream(bytesToDecompress));
//解压缩数组
MemoryStream outStream = new MemoryStream();
//由于Stream类型不能直接转换为byte[]只能通过MemoryStream做中间变换
while (true)
//循环读取数据流到outStream,直至读取完毕
int size = s2.Read(writeData, 0, writeData.Length);
if (size & 0)
outStream.Write(writeData, 0, size);
s2.Close();
byte[] outArr = outStream.ToArray();
outStream.Close();
return outA
#endregion
#region Private Methods
/// &summary&
/// 根据压缩强度返回使用了不用压缩算法的 Deflate 对象。
/// &/summary&
/// &param name="level"&压缩强度。&/param&
/// &returns&返回使用了不用压缩算法的 Deflate 对象。&/returns&
private Deflater GetDeflater(CompressionLevel level)
switch (level)
case CompressionLevel.DefaultCompression:
return new Deflater(Deflater.DEFAULT_COMPRESSION);
case CompressionLevel.BestCompression:
return new Deflater(Deflater.BEST_COMPRESSION);
case CompressionLevel.BestSpeed:
return new Deflater(Deflater.BEST_SPEED);
case CompressionLevel.NoCompression:
return new Deflater(Deflater.NO_COMPRESSION);
return new Deflater(Deflater.DEFAULT_COMPRESSION);
/// &summary&
/// 从给定的流生成压缩输出流。
/// &/summary&
/// &param name="inputStream"&原始流。&/param&
/// &returns&返回压缩输出流。&/returns&
private DeflaterOutputStream GetOutputStream(Stream inputStream)
return new DeflaterOutputStream(inputStream, GetDeflater(Level));
/// &summary&
/// 从给定的流生成压缩输入流。
/// &/summary&
/// &param name="inputStream"&原始流。&/param&
/// &returns&返回压缩输入流。&/returns&
private InflaterInputStream GetInputStream(Stream inputStream)
return new InflaterInputStream(inputStream);
#endregion
二.客户端:
Thread thread1;
private void button1_Click(object sender, EventArgs e)
label1.Text = "整理数据......";
thread1 = new Thread(new ThreadStart(UpLoad));
thread1.Start();
//catch (Exception e1)
MessageBox.Show("上传数据失败!错误代码如下:/r/n" + e1.ToString());
/// &summary&
/// 上传数据
/// &/summary&
private void UpLoad()
int LinLimit = 10;
string ZDDB1 = "ZD";
string Prsta = AppDomain.CurrentDomain.SetupInformation.ApplicationB
//Prsta = Prsta.Substring(0, Prsta.LastIndexOf("//", Prsta.Length - 2));
//截取Prsta的路径
SqlConn sqlConn = new SqlConn();
SqlConnection Conn2 = sqlConn.Sqlc2(Prsta, ZDDB1);
Conn2.Open();
string sqlse1 = "select top 100 * from SqlLogOut";
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlse1, Conn2);
SqlCommandBuilder scb = new SqlCommandBuilder(sqlDa);
DataSet Ds = new DataSet();
sqlDa.Fill(Ds, "SqlLogOut");
label1.Text = "共有" + Ds.Tables[0].Rows.Count.ToString() + "条记录
开始上传..........";
int Loop1 = Ds.Tables[0].Rows.Count / LinL
if (Ds.Tables[0].Rows.Count % LinLimit & 0)
for (int i = 1; i &= Loop1; i++)
DataSet DsPack = PackDs(Ds, LinLimit);
DsPack.RemotingFormat = SerializationFormat.B
//将DS设置为用于远程序传送的精简二进制模式
BinaryFormatter BinForm = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
BinForm.Serialize(ms, DsPack);
byte[] buffer = ms.ToArray();
byte[] byUpload = new CompressionHelper(CompressionLevel.BestSpeed).CompressToBytes(buffer);
//将byte数组再进行加压
localhost.DataTransport daTr = new DataTransport.localhost.DataTransport();
string Res = daTr.DataUpload(byUpload);
if (Res == "#1")
progressBar1.Value =Convert.ToInt16( Convert.ToDouble(i) / Loop1 * 100);
sqlDa.Update(Ds, "SqlLogOut");
//删除数据库上对应记录
label1.Text = "上传完成.";
Conn2.Close();
thread1.Abort();
三.WebService
public string DataUpload(byte[] byUpload,string UpBm)
byte[] byData = new CompressionHelper().DecompressToBytes(byUpload);
BinaryFormatter binForm = new BinaryFormatter();
DataSet dsUpload = binForm.Deserialize(new MemoryStream(byData)) as DataS
Bz1= "#1";
catch (Exception e1)
Bz1 = e1.Message.ToString();
return Bz1;
经此方法可以将原数据量大大压缩2/3以上,只是原来的1/3左右
qingyou0405 发表于日PackDs(Ds, LinLimit), 能提供此方法的源代码吗?我现在在做一个功能,涉及到webservice远程数据传输, 我的email
, 希望你能答复 。 turejackon 发表于日 回复 qingyou0405:PackDs(Ds, LinLimit)是用于装上传数据划分为若干个数据包,程序好简单,用一个同构DataSet每次取上传数据中的若干数据后清除相关行就可以了
malingxian 发表于日 ICSharpCode.SharpZipLib.dll是微软提供的?你很强啊turejackon 回复 malingxian:吓....不是吗,因为我也是看一个例子改过来的..他那里说是微软提供的.malingxian 发表于日 10:57:51 回复 turejackon:呵呵,确实不是。如果用.NET 2.0以上的话,可以用MS内置的ZIP工具压缩。 很不幸,我也用WebService进行大数据量传输,也用SOAP进行压缩,但是Dataset的压缩应该单独拿出来进行优化。我的做法是 Dataset-&XML-&Byte[]进行压缩这样做的好处是要比Dataset单独进行压缩数据量小更多,速度上也没有什么影响。 你可以比较一下Dataset经SOAP后跟XML的大小,数据量越大,XML相对越小&&因为二者结构不一样。chen_chen121212 发表于日 19:08:13 c++做的服务器,用.net引用wsdl后找不到方法了,为啥啊???你好,我按照你上面的方法,配置Web.config时,老是提示未能找到元素&****&的架构信息,网上相关资料比较少,能不能在线指导一下,我的email是
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:629925次
积分:9597
积分:9597
排名:第785名
原创:282篇
转载:259篇
评论:211条
(1)(1)(1)(1)(1)(3)(1)(1)(2)(2)(2)(2)(6)(5)(2)(1)(2)(4)(8)(3)(15)(13)(4)(1)(1)(1)(1)(2)(7)(5)(26)(111)(41)(39)(9)(7)(1)(2)(9)(3)(3)(1)(2)(52)(23)(3)(14)(16)(26)(2)(7)(1)(8)(1)(1)(12)(23)(1)
() () () ()
() () () () ()如何通过WebService批量上传多个大文件_百度知道
如何通过WebService批量上传多个大文件
提问者采纳
方法/步骤1.
Web Service 简介
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。(Web Service 在此不做过多介绍,具体介绍可百度下)2.
WEB Service 开发2.1.
Asp.Net 一般支持上传4MB大小文件,为实现上传超过4MB大小文件,Asp.Net项目需要调整配置(Web.Config)的httpRuntime节点。&httpRuntime maxRequestLength=&40960&
executionTimeout=&1800& /&maxRequestLength:指定输入流缓冲阈值限制(以 KB 为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。默认值为 4096 (4 MB)。executionTimeout: 指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。默认值110秒。2.2.
本人采用接收字节的方式开发Web Service,提供是创建还是累加参数,根据参数将文件字节写入文件中。示例代码如下:3.
WinForm 程序开发
WinForm是·Net开发平台中对Windows Form的一种称谓。新增WinForm程序项目,添加文件上传服务引用。3.1.
Winform 程序实现效果
程序界面简单设计为:选择文件按钮,选择文件列表,上传文件按钮、上传信息及上传进度。3.2.
Winform 上传文件效果示例演示:选择两大于4MB文件进行上传,上传成功。3.3.
文件上传关键源码localhost.WebService mWebService = new WinTest.localhost.WebService();mWebService.CookieContainer = new System.Net.CookieContainer();mWebService.Timeout =- 1;
对 XML Web services 的同步调用的超时(以毫秒为单位)。默认为 100000 毫秒。提示:如果将 Timeout 属性设置为 Timeout =-1,则指示该请求无超时。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C#&通过WebService方式&IIS发布网站&上传文件到服务器
应用场景:要将本地的文件 上传到服务器的虚拟机上
<img TITLE="" src="/blog7style/images/common/sg_trans.gif" real_src ="/bmiddle/001uwjOkgy6L9YafSb0ea&690" NAME="image_operate_23795"
ALT="C#&通过WebService方式&IIS发布网站&上传文件到服务器" /> 网络环境:公司局域网(如下图中第二种)
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/31718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_25215"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
开发环境:VS2010&&
服务器环境:WinServer2008&&&
虚拟机环境:WinServer2008
我的程序结构目录
AppSrvice 是服务文件 将来发布了以后要放到服务器上,
WindowFormsAppp 是Winform程序
第一步:创建一个新的:
Windows窗体应用程序
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/56671?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_6213"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
using System.Collections.G
using System.D
using System.D
using System.L
using System.T
//using System.T
using System.Windows.F
using System.Security.C
using System.IO;
using System.Web.S
namespace WindowsFormsApplication1
&&& public
partial class Form1 : Form
public Form1()
&&&&&&&&&&&
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
&&&&&&&&&&&
//localhost.WebService1 client = new
localhost.WebService1();&&
&&&&&&&&&&&
WindowsFormsApp.ServiceReference1.Service1SoapClient client = new
WindowsFormsApp.ServiceReference1.Service1SoapClient();
&&&&&&&&&&&
//WindowsFormsApp.ServiceReference1.WebService1SoapClient client =
WindowsFormsApp.ServiceReference1.WebService1SoapClient();
&&&&&&&&&&&
//上传服务器后的文件名&
一般不修改文件名称&&
&&&&&&&&&&&
int start = textBox1.Text.LastIndexOf("\");
&&&&&&&&&&&
int length = textBox1.Text.L
&&&&&&&&&&&
string serverfile = textBox1.Text.Substring(start + 1, length -
textBox1.Text.LastIndexOf("."))
&&&&&&&&&&&&&&&&&&&
+ DateTime.Now.ToString("-yyyy-mm-dd-hh-mm-ss")
&&&&&&&&&&&&&&&&&&&
+ textBox1.Text.Substring(textBox1.Text.LastIndexOf("."),
textBox1.Text.Length - textBox1.Text.LastIndexOf("."));
&&&&&&&&&&&
client.CreateFile(serverfile);
&&&&&&&&&&&
//要上传文件的路径&&
&&&&&&&&&&&
string sourceFile = textBox1.T
&&&&&&&&&&&
string md5 = GetMD5(sourceFile);
&&&&&&&&&&&
FileStream fs = new FileStream(sourceFile, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
&&&&&&&&&&&
int size = (int)fs.L
&&&&&&&&&&&
int bufferSize = 1024 * 512;
&&&&&&&&&&&
int count = (int)Math.Ceiling((double)size /
(double)bufferSize);
&&&&&&&&&&&
for (int i = 0; i & i++)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
int readSize = bufferS
&&&&&&&&&&&&&&&
if (i == count - 1)
&&&&&&&&&&&&&&&&&&&
readSize = size - bufferSize *
&&&&&&&&&&&&&&&
byte[] buffer = new byte[readSize];
&&&&&&&&&&&&&&&
fs.Read(buffer, 0, readSize);
&&&&&&&&&&&&&&&
client.Append(serverfile, buffer);
&&&&&&&&&&&
&&&&&&&&&&&
bool isVerify = client.Verify(serverfile, md5);
&&&&&&&&&&&
if (isVerify)
&&&&&&&&&&&&&&&
MessageBox.Show("上传成功");
&&&&&&&&&&&
&&&&&&&&&&&&&&&
MessageBox.Show("上传失败");
private string GetMD5(string fileName)
&&&&&&&&&&&
FileStream fs = new FileStream(fileName, FileMode.Open,
FileAccess.ReadWrite, FileShare.ReadWrite);
&&&&&&&&&&&
MD5CryptoServiceProvider p = new MD5CryptoServiceProvider();
&&&&&&&&&&&
byte[] md5buffer = p.ComputeHash(fs);
&&&&&&&&&&&
fs.Close();
&&&&&&&&&&&
string md5Str = "";
&&&&&&&&&&&
List strList = new List();
&&&&&&&&&&&
for (int i = 0; i & md5buffer.L i++)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
md5Str += md5buffer[i].ToString("x2");
&&&&&&&&&&&
&&&&&&&&&&&
return md5S
private void button2_Click(object sender, EventArgs e)
&&&&&&&&&&&
OpenFileDialog openDialog = new OpenFileDialog();
&&&&&&&&&&&
//openDialog.Filter =
"视频文件(*.avi,*.wmv,*.mp4)|*.*.*.mp4";
&&&&&&&&&&&
if (openDialog.ShowDialog() == DialogResult.OK)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
textBox1.Text = openDialog.FileN
&&&&&&&&&&&
第二步:创建WebService
关键代码如下:
using System.C
using System.D
using System.L
using System.W
using System.Web.S
using System.Web.Services.P
using System.Xml.L
using System.IO;
using System.T
using System.Security.C
using System.Collections.G
namespace WebService1
&&& /// Service1
的摘要说明
[WebService(Namespace = "")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
&&& // 若要允许使用
ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
&&& public class
Service1 : System.Web.Services.WebService
[WebMethod]
public string HelloWorld()
&&&&&&&&&&&
return "Hello World";
[WebMethod]
public bool CreateFile(string fileName)
&&&&&&&&&&&
bool isCreate =
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
fileName = bine(Server.MapPath(""),
Path.GetFileName(fileName));
&&&&&&&&&&&&&&&
//首先设置上传服务器文件的路径& 然后发布web服务 发布的时候要自己建一个自己知道的文件夹
"C:\NMGIS_Video"
"C:\NMGIS_Video"&&&&&&&&&&&&&&&
fileName = bine(Server.MapPath("") + @"\Video" +
Path.GetFileName(fileName));&&
&&&&&&&&&&&&&&&
FileStream fs = new FileStream(fileName, FileMode.Create,
FileAccess.ReadWrite, FileShare.ReadWrite);
&&&&&&&&&&&&&&&
fs.Close();
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
isCreate =
&&&&&&&&&&&
&&&&&&&&&&&
return isC
[WebMethod]
public bool Append(string fileName, byte[] buffer)
&&&&&&&&&&&
bool isAppend =
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
//fileName = bine(@"C:\NMGIS_Video" +
Path.GetFileName(fileName));&&
&&&&&&&&&&&&&&&
fileName = bine(Server.MapPath(""),
Path.GetFileName(fileName));
&&&&&&&&&&&&&&&
FileStream fs = new FileStream(fileName, FileMode.Open,
FileAccess.ReadWrite, FileShare.ReadWrite);
&&&&&&&&&&&&&&&
fs.Seek(0, SeekOrigin.End);
&&&&&&&&&&&&&&&
fs.Write(buffer, 0, buffer.Length);
&&&&&&&&&&&&&&&
fs.Close();
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
isAppend =
&&&&&&&&&&&
&&&&&&&&&&&
return isA
[WebMethod]
public bool Verify(string fileName, string md5)
&&&&&&&&&&&
bool isVerify =
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
fileName = bine(Server.MapPath(""),
Path.GetFileName(fileName));
&&&&&&&&&&&&&&&
// fileName =
Server.MapPath("D:\MesWebCR\picture")& +
Path.GetFileName(fileName);
&&&&&&&&&&&&&&&
FileStream fs = new FileStream(fileName, FileMode.Open,
FileAccess.ReadWrite, FileShare.ReadWrite);
&&&&&&&&&&&&&&&
MD5CryptoServiceProvider p = new MD5CryptoServiceProvider();
&&&&&&&&&&&&&&&
byte[] md5buffer = p.ComputeHash(fs);
&&&&&&&&&&&&&&&
fs.Close();
&&&&&&&&&&&&&&&
string md5Str = "";
&&&&&&&&&&&&&&&
List strList = new List();
&&&&&&&&&&&&&&&
for (int i = 0; i & md5buffer.L i++)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
md5Str += md5buffer[i].ToString("x2");
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
if (md5 != md5Str)
&&&&&&&&&&&&&&&&&&&
isVerify =
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
isVerify =
&&&&&&&&&&&
&&&&&&&&&&&
return isV
第三步:发布服务
选中服务项目,右键 发布
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/16562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_69894"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
发布方法选择:文件系统
目标位置:是选择你发布后生成文件的位置
自己随便找个地方即可
然后点击 发布
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/11171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
第四步:拷贝文件到服务器
将刚才发布好的文件拷贝到你要上传到的服务器的虚拟机的指定目录下
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/30843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/00156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_72359"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
第五步:在虚拟机上发布网站
打开虚拟机的IIS 发布一个网站
文件路径指向你刚才拷贝到虚拟机上的文件目录
IP地址就是当前虚拟机的IP&
要设置为固定的IP
端口一定注意 不要与当前正在使用的端口冲突
建议更改一个
然后确定 发布网站
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/34937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_3170"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
选中刚才发布的网站 ,右边滚动条向下,选择 默认文档并双击
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/49421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
双击打开后右边点击添加按钮 ,当刚才复制到虚拟机当中的 .asmx
文件名添加到里边点确定
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/15187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
,管理网站,浏览& 查看发不好的网站是否可以访问
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/48125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
我这里浏览是可以访问的:如下图
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/16812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_75447"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
第六步:设置虚拟机网络环境
虚拟机》编辑& 或者&
开始菜单中 找到 Virtral Network Editor
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/39406?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" /><img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/51046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_76165"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
打开虚拟网络编辑器
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/54140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_76633"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
Nat 设置里边 映射两个端口&
TCP、UDP类型各一个, 然后点击确定
宿主机的8070
端口映射到虚拟机的“192.168.16.135”的8070端口了,因为web服务自动开放的端口是8070,所以,只要我们访问
“http://192.168.1.54:8070”,就可以访问到虚拟机的8070端口,也就是web服务了(这里宿主机的端口可以改成其他端口,无需跟虚拟机端口一致,我是为了省事都写成了8070)
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/57968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
然后点击应用 确定&
。。。这里设置好了以后就可以通过访问虚拟机的宿主机IP访问到你虚拟机上的服务
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/40765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_80439"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
&此时就可以通过其他任意机器访问你的.asmx页面
注意你的端口一定要正确正如上面所说:这里直接通过访问宿主机的Ip就可以
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/11281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_83029"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
第七步:为客户端添加服务器引用
添加服务引用
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/42625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
添加服务地址 点击 前往 ,如果正确的话 会在下面显示出你的服务页面
然后点击确定
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/27234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" NAME="image_operate_84230"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
&第八步:测试
运行客户端测试
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/26968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
这里显示成功了&
那么我们去虚拟机的目录下看一看到底有没有
<img ALT="" src="/blog7style/images/common/sg_trans.gif" real_src ="http://img.blog.csdn.net/24125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHdqOTAxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"
TITLE="C#&通过WebService方式&IIS发布网站&上传文件到服务器" />
这里有两个文件 我测试了两次 ,&
文件名称我在程序当中追加了当前时间的格式化字符串,文件大小也是对的。
免积分 源码下载
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 web service 上传文件 的文章

 

随机推荐