2010-02-12 12 views
1

Есть много вопросов относительно передачи файлов с WCF. У меня все работает, в том числе большие файлы в режиме «chunked». У меня есть возможность отменить загрузку файла с отправляющей стороны (той, которая запускает загрузку), и интерфейс обратного вызова, чтобы уведомить, когда передача принята и отменена.Передача файла 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); 
} 

+0

Итак, как только загрузка началась, у вас уже есть рабочая реализация, которая сообщит службе об отмене загрузки? Или вы хотите добавить эту реализацию? –

+0

Да, я уже добавляю возможность отмены, но только на стороне клиента. То, что у меня не было, - это вариант отмены со стороны сервера. Но неважно, что я уже понял это: Я добавил метод интерфейса обратного вызова, чтобы запросить форму аннулирования сервера. На стороне клиента я прекращаю отправку данных, подтверждаю отмену на сервер и закрываю канал. Его работа красиво. –

+0

Сделайте этот комментарий в ответ, чтобы люди, которые приходят посмотреть позже, увидят, как вы решили проблему. :) –

ответ

0

Это было мое решение, которое работает отлично:

Добавлен метод на обратный вызов, чтобы запросить форму аннулирования сервера. На стороне клиента я использую флаг, который установлен в true, когда выполняется запрос отмены. Затем прекратите отправку данных, подтвердите отмену на сервер и закройте канал (очистка временных файлов ...).