支持取消的WCF文件传输

支持取消的WCF文件传输,wcf,file-upload,Wcf,File Upload,关于使用WCF进行文件传输,有很多问题。 我已经让一切都正常工作了,包括“分块”模式下的大文件。 我可以选择从发送方(开始上传的一方)取消文件上传,并有一个回调接口来通知何时接受和取消传输 我的问题是从接收端取消上传。我可以强迫频道关闭,但我想通知发送方取消。 我没有办法解决这个问题。有什么帮助吗 谢谢 更新: 我已经弄明白了。见下面的评论。 服务接口如下所示: 顺便说一下,服务接口如下所示: [ServiceContract(SessionMode = SessionMode.Require

关于使用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);
}

这是我的解决方案,运行良好:

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

那么,一旦开始上传,您已经有了一个工作实现,它将通知服务取消上传?或者您希望添加该实现?是的,我已经添加了取消选项,但仅在客户端添加。我没有从服务器端取消的选项。但不用担心,我已经弄明白了:我在回调接口上添加了一个方法,从服务器请求取消。在客户端,我停止发送数据,向服务器确认取消并关闭通道。它工作得很好。把这个评论变成一个答案,这样以后来看的人就会看到你是如何解决这个问题的。:)