具有取消支持的WCF文件传输

时间:2010-02-12 15:35:18

标签: wcf file-upload

关于使用WCF进行文件传输存在很多问题。 我已经完成了所有工作,包括处于“分块”模式的大文件。 我可以选择取消发送方(开始上传的文件)的上传文件和回传界面,以便在接受转移时通知并取消。

我的问题是从接收端取消上传。我可以强行关闭频道,但我想通知发送方取消。 我没有得到解决方案。有什么帮助吗?

由于

更新

我已经明白了。请参阅下面的评论。 服务界面如下所示:

顺便说一句,服务界面如下所示:

[ServiceContract(SessionMode = SessionMode.Required, 
CallbackContract = typeof(IFileTransferServiceCallback))]
public interface IFileTransferService
{
        [OperationContract(IsOneWay = true)]
        void RequestSendFile(FileTransferInvitation request);

        [OperationContract(IsOneWay=true)]
        void SendData(string id, byte[] data, int length);

        [OperationContract(IsOneWay = true)]
        void SendCancel(string id); 

        [OperationContract(IsOneWay = true)]
        void SendEnd(string id);

        [OperationContract(IsOneWay = true)]
        void RequestSendCancelConfirmed(string id);
}


public interface IFileTransferServiceCallback
{
        [OperationContract(IsOneWay = true)]
        void SendStarted(FileTransferInvitation transfer);

        [OperationContract(IsOneWay = true)]
        void RequestSendCancel(string id);

        [OperationContract(IsOneWay = true)]
        void SendCompleted(string id, Exception error);
}

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IFileTransferServiceCallback))] public interface IFileTransferService { [OperationContract(IsOneWay = true)] void RequestSendFile(FileTransferInvitation request); [OperationContract(IsOneWay=true)] void SendData(string id, byte[] data, int length); [OperationContract(IsOneWay = true)] void SendCancel(string id); [OperationContract(IsOneWay = true)] void SendEnd(string id); [OperationContract(IsOneWay = true)] void RequestSendCancelConfirmed(string id); } public interface IFileTransferServiceCallback { [OperationContract(IsOneWay = true)] void SendStarted(FileTransferInvitation transfer); [OperationContract(IsOneWay = true)] void RequestSendCancel(string id); [OperationContract(IsOneWay = true)] void SendCompleted(string id, Exception error); }

1 个答案:

答案 0 :(得分:0)

这是我的解决方案,工作正常:

在回调接口上添加了一个方法,用于从服务器请求取消。 在客户端,我使用一个标志,当发出取消请求时,该标志设置为true。然后停止发送数据,确认取消到服务器并关闭通道(清理临时文件......)。