Вопрос

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

CommunicationObjectFaultedException: «Объект связи, System.ServiceModel.servicehost, не может быть использован для связи, потому что он находится в неисправном состоянии».

На System.Servicemodel.Channels.comMUnicateObject.Close (Timepan 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; }
}
}

И мое приложение.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>
Это было полезно?

Решение

Лучшая отправная точка будет Tom Hollander's Thread Blog Post:

и хорошо посмотрите на MSDN Docs On Очереди в WCF. - Много вещей тоже!

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top