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

如何从服务器端方法中止WCF文件上传Share

时间:2023-04-11 12:04:33 C#

如何从服务器端方法中止WCF文件上传WinForms客户端应用程序到IIS服务器,用于内部系统。我有一个MessageContract类定义如下://////用于将文档数据与文件流一起上传的消息合约///[MessageContract]publicclassDocumentDataFileUploadInfo:IDisposable{///为简洁起见省略了一些字段//////包含文件的流///[MessageBodyMember(Order=1)]publicStreamFileByteStream;//////如有必要,处理流///publicvoidDispose(){try{if(FileByteStream!=null){FileByteStream.Close();FileByteStream.Dispose();文件字节流=空;}}catch{}}}我的服务端WCF上传法的内容如下://////将给定的文件作为流上传到数据库中//////包含上传所需的所有信息的消息///publicDocumentDataFileUploadResponseUploadDocument(DocumentDataFileUploadInfofileInfoWithStream){byte[]documentBytes=null;stringfileName=fileInfoWithStream.FileName;//创建消息响应DocumentDataFileUploadResponseresponse=newDocumentDataFileUploadResponse();//检查正在上传的文件类型(从数据库)FileTypefileType=GetFileType(fileName,context);if(!fileType.UploadPermitted){//我们不允许这种文件类型response.MetaData=InsertDocumentDataResult.FileTypeProhibited;返回响应;}//以字节数组的形式获取流的内容(扩展方法)//doc/database//为简洁起见省略了代码response.MetaData=InsertDocumentDataResult.Success;返回响应;如果重要,我正在使用NetTcpBinding:一切都很好,我可以上传非常大的文件没问题,客户端可以取消上传的唯一问题是这个块:if(!fileType.UploadPermitted){response.MetaData=InsertDocumentDataResult.FileTypeProhibited;返回响应;这应该(并且确实)返回一个失败代码,因为文件类型是不允许的。但是,一旦服务方法完成,就会调用MessageContract类上的Dispose方法,处理流,然后客户端在获得返回码之前完成整个流上传,即使服务器没有命中一行读取流。必须有一些底层WCF流管道认为流需要完成才能被处理。基本上,我希望SERVER能够取消流上传并返回失败代码。我尝试了以下方法:我唯一的其他选择(我可以看到)是如上所述中止请求,导致抛出CommunicationException,但为客户端添加一个新的服务方法以获取失败代码。我真的不想这样做,因为这应该尽可能无状态,而且我确信必须有一种简单的方法来取消服务器端的流上传。任何帮助是极大的赞赏!以上就是C#学习教程的全部内容:如何从服务器端停止WCF文件上传和共享的方法。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: