关于使用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);
}
答案 0 :(得分:0)
这是我的解决方案,工作正常:
在回调接口上添加了一个方法,用于从服务器请求取消。 在客户端,我使用一个标志,当发出取消请求时,该标志设置为true。然后停止发送数据,确认取消到服务器并关闭通道(清理临时文件......)。