WEB开发网
开发学院图形图像Flash Silverlight专题(10)-WCF通信(2) 阅读

Silverlight专题(10)-WCF通信(2)

 2008-10-27 11:49:08 来源:WEB开发网   
核心提示:在上文我粗略的介绍了如何创建WCF Service,并在客户端调用生成的WCF Service来取得数据问题:调用WCF Service的时候,Silverlight专题(10)-WCF通信(2),并没有一个DownloadProcessChanged之类的事件来反馈已经上传了多少那么我们如何来实现在客户端实时展示当天

在上文我粗略的介绍了如何创建WCF Service,并在客户端调用生成的WCF Service来取得数据

问题:

调用WCF Service的时候,并没有一个DownloadProcessChanged之类的事件来反馈已经上传了多少

那么我们如何来实现在客户端实时展示当天已经上传了多少呢?

解决方案:

我们可以把文件分成很多块,逐次上传一小部分(比如2K,4K,8K等等)

1。首先我们还是按照Silverlight专题(9)-WCF通信(1)这个教程中所示的先创建个新的Silverlight工程

并添加进一个Silverlight-Enabled WCF Service(我取名为DownloadService,以前随便去的名字,懒得改了)

其里面含有的操作契约如下:

1 [ServiceContract(Namespace = "")]
2 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
3 public class DownloadService
4 {
5   [OperationContract]
6   public string UploadImg(string fileName, byte[] fileData, bool firstChunk, bool lastChunk)
7   {
8     if (!File.Exists(@HostingEnvironment.ApplicationPhysicalPath + @"/Uploads/" + fileName))
9     {
10       string tmpExtension = "_tmp";
11       string tempFileName = fileName + tmpExtension;
12       if (firstChunk)
13       {
14         fileName += tmpExtension;
15         if (File.Exists(@HostingEnvironment.ApplicationPhysicalPath + tempFileName))
16         {
17           File.Delete(@HostingEnvironment.ApplicationPhysicalPath + tempFileName);
18         }
19       }
20 
21       FileStream fs = File.Open(@HostingEnvironment.ApplicationPhysicalPath + tempFileName, FileMode.Append);
22       fs.Write(fileData, 0, fileData.Length);
23       fs.Close();
24 
25       if (lastChunk)
26       {
27         //Rename file to original file
28         File.Move(@HostingEnvironment.ApplicationPhysicalPath + tempFileName, @HostingEnvironment.ApplicationPhysicalPath + "/ClientBin/Uploads/" + fileName);
29       }
30     }
31 
32     return "./Uploads/" + fileName;
33   }
34 }

1 2 3 4  下一页

Tags:Silverlight 专题 WCF

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接