Как использовать MSMQ в WCF? - PullRequest
2 голосов
/ 05 мая 2010

Я могу работать со многими привязками WCF, кроме netMsmqBinding. Все, что я получаю, это:

CommunicationObjectFaptedException: «Объект связи, System.ServiceModel.ServiceHost, не может использоваться для связи, поскольку он находится в состоянии Failed.»

в System.ServiceModel.Channels.CommunicationObject.Close (TimeSpan timeout)

Я пробовал это в Windows Server 2008 R2 со следующими установленными функциями

  • Очередь сообщений
  • Службы очереди сообщений
  • Сервер очереди сообщений
  • Триггеры очереди сообщений
  • Поддержка HTTP
  • Поддержка многоадресной рассылки
  • Служба очереди сообщений DCOM Proxy

Я также пытался вручную добавить личную очередь сообщений в диспетчере сервера, но она не работала.

Я использую службу Windows для размещения своего MSMQ. Мой сервисный контракт

namespace MyCompany.Services
{
[ServiceContract(Name = "ServiceName",
                     Namespace = "http://MyCompany/ServiceName")]
public interface IServiceName
{
    [OperationContract(IsOneWay = true)]
    void Insert(MyData[] data);
}
[DataContract]
public class MyData
{
    [DataMember]
    public DateTime DateTime { get; set; }
    [DataMember]
    public double Lat { get; set; }
    [DataMember]
    public double Lon { get; set; }
    [DataMember]
    public TimeSpan Timespan { get; set; }
    [DataMember]
    public Guid Id { get; set; }
    [DataMember(IsRequired = false)]
    public int? Category { get; set; }
}
}

И мой app.config содержит

  <endpoint
      address="net.msmq://localhost/private/ServiceName"
      binding="netMsmqBinding"
      contract="MyCompany.Services.IServiceName"
      bindingConfiguration="tolerant"
      behaviorConfiguration="tolerant"
      />

и

<netMsmqBinding>
  <binding name="tolerant"
         maxReceivedMessageSize="2147483647"
         >
    <readerQuotas maxArrayLength="2147483647" />
    <security mode="None"/>
  </binding>
</netMsmqBinding>

1 Ответ

5 голосов
/ 05 мая 2010

Лучшей отправной точкой будет сообщение в блоге Тома Холландера из трех частей:

и посмотрите документы MSDN на Очереди в WCF - там тоже много всего!

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

Ознакомьтесь с ресурсами и посмотрите, поможет ли это вам на шаг или два дальше - если нет, нам придется получать от вас гораздо больше информации!

...