wcf netmsmq транзакционный сервис - PullRequest
1 голос
/ 09 августа 2011

Хи, все.

У меня интересный случай. Я попытался создать соединение службы клиента wcf на основе привязки netmsmq, размещенной в приложении службы Windows. Таким образом, я уловил проблему с моей службой хоста - она ​​не может получить сообщение из очереди. MSDTC показывает откат транзакции. И после некоторых попыток сообщения перемещаются в очередь повторных попыток. ServiceHost становится ошибочным состоянием, и после того, как я запускаю снова, снова и снова происходит сбой. Таким образом, в приложении хоста у меня нет исключений и ничего, кроме состояния отказа хоста. У меня есть сервис с двумя контрактами (если это важно).

[ServiceContract]
public interface IService
{
    [OperationContract(IsOneWay = true)]
    void Send1(MyDataContract data);

    [OperationContract(IsOneWay = true)]
    void Send2(MyDataContract data);
}
[DataContract]
public class MyDataContract
{
    [DataMember]
    public string From { get; set; }
    [DataMember]
    public string Host { get; set; }
    [DataMember]
    public string To { get; set; }
    [DataMember]
    public DateTime SendTime { get; set; }
}

некоторая реализация сервиса

[OperationBehavior(TransactionScopeRequired = true, 
                 TransactionAutoComplete = true)]
public void Send1(MyDataContract dc)
{......}

сервисная конфигурация:

<адрес конечной точки = "net.msmq: // localhost / private / myservice" binding = "netMsmqBinding" contract = "IService" bindingConfiguration = "NetMsmqBinding_IService" />

Сообщения в очереди - клиентский сервис работает нормально. Таким образом, во время выполнения метод Send1 службы host никогда не выполняется. Но я обрабатываю события HostFaults близко после перемещения сообщения из очереди повторных попыток во входящую очередь. Это все, что я могу сказать.

любая помощь?

1 Ответ

0 голосов
/ 10 августа 2011

Итак, я трачу один день, чтобы обнаружить проблему. Итак, шаг за шагом: 1. У меня есть образец Microsoft на MSMQ WCF 2. Я не нашел никакой разницы 3. Я понял, что у меня большие сообщения (больше 1Mb), поэтому WCF по умолчанию не может десериализовать такие большие сообщения. Необходимо было установить maxBufferPoolSize и maxReceivedMessageSize

Но вот в чем вопрос - почему клиент wcf успешно отправляет такие большие сообщения без каких-либо расширенных настроек:)

Мой совет: в WCF установите максимально возможный для вас размер пакета и пулов (если только вы используете эту услугу).

...