在winform調用WebService上傳文件~

本文详细介绍了一种使用WinForm应用程序将文件上传到WebService的方法。通过引用Microsoft.Web.Services2.dll库,利用FileStream读取文件,并将其转换为字节数组进行上传。代码实现了文件分段上传、续传功能,适用于多线程环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本Blog的WebService有一個關于上傳文件的文章!
而這個就是所說的winform代碼!!

長話短說......直接貼代碼了!有疑問請看http://yaka.cnblogs.com/archive/2006/06/04/416910.html
winform同樣的也要引用Microsoft.Web.Services2.dll~在安裝目錄能夠找到!C:\Program Files\Microsoft WSE\v2.0
當然更加要引用之前做好的Web Service~
導入兩個命名空間~
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Dime;
None.gif              private   void  Send()
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {    
InBlock.gif                
byte [] b = null;
InBlock.gif                
//Web Service class
InBlock.gif
                ET.Service1 et = new ET.Service1();
InBlock.gif                
//this.finfo.FullName 要上傳的文件名
InBlock.gif
                string name = this.finfo.Name;
InBlock.gif                FileStream f 
= new FileStream(name,FileMode.Open,FileAccess.Read,FileShare.Read);
InBlock.gif                
//文件总长度
InBlock.gif
                long totalLength = f.Length;
InBlock.gif                
//每次讀取數據的長度
InBlock.gif
                int length = 128 * 1024;
InBlock.gif                
//偏移量
InBlock.gif
                long offset = 0;
InBlock.gif                
//直到offset超齣範圍
InBlock.gif
                while(totalLength > offset)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
//原定讀取長度大于可讀取長度
InBlock.gif
                    if( partLength - offset < length )
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        length 
= (int)(partLength - offset);
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
//移動起始位置
InBlock.gif
                    f.Seek(offset,SeekOrigin.Begin);
InBlock.gif                    
//讀取文件
InBlock.gif
                    b = new byte[length];
InBlock.gif                    f.Read(b,
0,b.Length);
InBlock.gif                    
//清空緩衝區
InBlock.gif
                    f.Flush();
InBlock.gif                    
//將offset與發送出去的長度纍加,
InBlock.gif
                    try
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        //將要上傳的文件流作為附件
InBlock.gif                        MemoryStream myMemoryStream 
= new MemoryStream(b, 0,length);
InBlock.gif                        DimeAttachment dimeAttach    
= new DimeAttachment("audio/unknown", TypeFormat.Unknown, myMemoryStream);
InBlock.gif                        //嚮相應的WebService添加附件
InBlock.gif                        et.RequestSoapContext.Attachments.Add(dimeAttach);
InBlock.gif                        
//開始上傳,接收成功上傳的數據長度
InBlock.gif                        int num = et.Upload(name,offset);
InBlock.gif                        //將offset與發送出去的長度纍加
InBlock.gif                        offset 
= offset + num;                    
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
catch(Exception e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
ExpandedSubBlockEnd.gif                    }

InBlock.gif
ExpandedSubBlockEnd.gif                }

InBlock.gif                f.Close();
ExpandedBlockEnd.gif            }

這段代碼就是上傳的核心~~當然我的程序是多段,多綫程,可以續傳的!所以上麵的代碼有一少部分作了修改,那些功能就讓大家去寫吧!~呵呵~
但是還有一個註意的地方!改一個東西~要不就會編譯齣錯!在Reference.cs裏麵的service類繼承為Microsoft.Web.Services2.WebServicesClientProtocol

转载于:https://www.cnblogs.com/YaKa/archive/2006/06/04/416816.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值