当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET4上的WCF流式文件传输共享

时间:2023-04-10 20:12:49 C#

.NET4上的WCF流式文件传输我需要一个关于WCF流式文件传输的好例子。我找到了一些并尝试了它们,但帖子很旧,我正在玩.net4和IIS7,所以有一些问题。你能给我一个好的、最新的例子吗?下面的答案详细介绍了一些将二进制数据发布到restful服务的技术。以下代码是您如何编写RESTfulWCF服务的示例,它并不完整,但它将为您提供一个良好的起点。示例服务,请注意这不是生产就绪代码。[ServiceContract][AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)][ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]publicclassFileService{privateIncomingWebRequestContextm_Request;私有OutgoingWebResponseContextm_Response;[WebGet(UriTemplate="{appName}/{id}?action={action}")]publicStreamGetFile(stringappName,stringid,stringaction){varrepository=newFileRepository();varresponse=WebOperationContext.Current.OutgoingResponse;varresult=repository.GetById(int.Parse(id));if(action!=null&&action.Equals("download",StringComparison.InvariantCultureIgnoreCase)){response.Headers.Add("Content-Disposition",string.Format("attachment;filename={0}",result.Name));}response.Headers.Add(HttpResponseHeader.ContentType,result.ContentType);response.Headers.Add("X-文件名",result.Name);返回结果.内容;}[WebInvoke(UriTemplate="{appNa我}",Method="POST")]publicvoidSave(stringappName,StreamfileContent){try{if(WebOperationContext.Current==null)thrownewInvalidOperationException("WebOperationContextisnull.");m_Request=WebOperationContext.Current.IncomingRequest;m_Response=WebOperationContext.Current.OutgoingResponse;varfile=CreateFileResource(fileContent,appName);if(!FileIsValid(file))thrownewWebFaultException(HttpStatusCode.BadRequest);SaveFile(file);SetStatusAsCreated(file);}catch(Exceptionex){if(ex.GetType()==typeof(WebFaultException))抛出;如果(ex.GetType().IsGenericType&&ex.GetType().GetGenericTypeDefinition()==typeof(WebFaultException))抛出;抛出newWebFaultException("发生意外错误。",HttpStatusCode.InternalServerError);}}privateFileResourceCreateFileResource(StreamfileContent,stringappName){varresult=newFileResource();fileContent.CopyTo(result.Content);result.ApplicationName=应用钠我;result.Name=m_Request.Headers["X-文件名"];result.Location=@"C:SomeFolder"+result.Name;结果.ContentType=m_Request.Headers[HttpRequestHeader.ContentType]??this.GetContentType(result.Name);结果.DateUploaded=DateTime.Now;返回结果;}privatestringGetContentType(stringfilename){//这应该替换为某种形式的逻辑以确定正确的文件内容类型(IE、使用注册表、扩展名、xml文件等)return"application/octet-stream";}privateboolFileIsValid(FileResourcefile){varvalidator=newFileResourceValidator();varclientHash=m_Request.Headers[HttpRequestHeader.ContentMd5];返回validator.IsValid(file,clientHash);}privatevoidSaveFile(FileResourcefile){//这会将有关文件的元数据保存到数据库(IE、大小、文件名、文件位置等)newFileRepository().AddFile(file);}privatevoidSetStatusAsCreated(FileResourcefile){varlocation=newUri(m_Request.UriTemplateMatch.RequestUri.AbsoluteUri+"/"+file.Id);m_Response.SetStatusAsCreated(位置);示例客户端,请注意这不是生产就绪代码以上就是C#学习教程:.NET4上的WCF流式文件传输的全部内容,如果对您有用,还需要了解更多C#学习教程,希望大家多加关注——//*********************************//示例客户端//**********************************privatevoidUploadButton_Click(objectsender,EventArgse){varuri="http://dev-fileservice/SampleApplication"varfullFilename=@"C:somefile.txt";varfileContent=File.ReadAllBytes(fullFilename);使用(varwebClient=newWebClient()){try{webClient.Proxy=null;webClient.Headers.Add(HttpRequestHeader.ContentMd5,this.CalculateFileHash());webClient.Headers.Add("X-DaysToKeep",DurationNumericUpDown.Value.ToString());webClient.Headers.Add("X-文件名",Path.GetFileName(fullFilename));webClient.UploadData(uri,"POST",fileContent);varfileUri=webClient.ResponseHeaders[HttpResponseHeader.Location];Console.WriteLine("文件可以下载到"+fileUri);}catch(Exceptionex){varexception=ex.Message;}}}privatestringCalculateFileHash(){varhash=MD5.Create().ComputeHash(File.ReadAllBytes(@"C:somefile.txt"));varsb=newStringBuilder();for(inti=0;i本文搜集自网络,不代表立场,如涉及侵权,请点右联系管理员删除。如需转载请注明出处: