Заказанная доставка с NetNamedPipeBinding с использованием вызовов oneWay - PullRequest
0 голосов
/ 26 декабря 2010

Можно ли гарантировать заказанную доставку с помощью вызовов oneWay, используя привязку namedPipe?

У меня есть служба WCF / клиент, связывающаяся с использованием привязки namedPipe. Клиент предоставляет контракт обратного вызова, в котором все методы обратного вызова помечены как OneWay. Как то так

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]  
public interface IMyService  
{  
    [OperationContract]  
    void MyOperation();  
}

public interface IMyServiceCallback  
{  
   [OperationContract(IsOneWay=true)]
   void MyCallback1();

   [OperationContract(IsOneWay=true)]
   void MyCallback2();  
}  

На стороне сервера реализация метода MyOperation всегда сначала вызывает MyCallback1, а затем MyCallback2, но я наблюдаю, что иногда клиент получает вызовы в неправильном порядке (сначала MyCallback2, а затем MyCallback1).

При поиске в интернете я обнаружил, что заказ не гарантируется при односторонней работе, как указано здесь , а также существует нечто, называемое reliableSession , которое обеспечивает порядок сообщений.

Все примеры в Интернете для надежного сеанса имеют привязку TCP (а не один с NamedPipeBinding), а tcpBinding также имеет свойство с именем ReliableSession , которого нет в NetNamedPipeBinding. Поэтому я не уверен, будет ли надежный сеанс работать с NetNamedPipeBinding или нет.

Вопрос:

Работает ли надежный сеанс с namedPipeBinding? Если да, то как? Если нет, есть ли другой способ, которым я могу гарантировать заказанную доставку?

1 Ответ

3 голосов
/ 27 декабря 2010

http://msdn.microsoft.com/en-us/library/aa480191.aspx

Введение в надежный обмен сообщениями с помощью Windows Communication Foundation

...

NetNamedPipeBinding находится поверх поддержки операционной системы Windows для надежной доставки сообщений и надежных потоков через именованные каналы. Поскольку именованные каналы ориентированы на соединение, легко поддерживают сеансы, надежны по конструкции и, как правило, не являются мостовыми, нет необходимости в поддержке WS-RM в этой привязке .

Скорее всего, ваши сообщения доставляются в том порядке, в котором сервер отправляет их , а с последним вам нужно работать. Возможно, сервер работает одновременно и не дает гарантии для заказанной отправки.

Опять же, я могу ошибаться. По моей ссылке выше, есть некоторые атрибуты, которые вы можете указать в вашем контракте и реализации, которые контролируют заказанную доставку.

Этот вопрос также содержит дополнительную информацию.

...