如何在WCF中使用MSMQ?

Jad*_*ias 2 wcf msmq netmsmqbinding

我可以使用许多WCF绑定,除了netMsmqBinding.我得到的只是:

CommunicationObjectFaultedException:"通信对象System.ServiceModel.ServiceHost不能用于通信,因为它处于Faulted状态."

在System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan超时)

我在安装了以下功能的Windows Server 2008 R2中尝试过它

  • 消息队列
  • 消息队列服务
  • 消息队列服务器
  • 消息队列触发器
  • HTTP支持
  • 多播支持
  • 消息队列DCOM代理

我还尝试在服务器管理器中手动添加私有消息队列,但它不起作用.

我正在使用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; }
}
}
Run Code Online (Sandbox Code Playgroud)

我的app.config包含

  <endpoint
      address="net.msmq://localhost/private/ServiceName"
      binding="netMsmqBinding"
      contract="MyCompany.Services.IServiceName"
      bindingConfiguration="tolerant"
      behaviorConfiguration="tolerant"
      />
Run Code Online (Sandbox Code Playgroud)

<netMsmqBinding>
  <binding name="tolerant"
         maxReceivedMessageSize="2147483647"
         >
    <readerQuotas maxArrayLength="2147483647" />
    <security mode="None"/>
  </binding>
</netMsmqBinding>
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

最好的出发点是Tom Hollander的三篇博文:

并且好好看看WCF中队列的MSDN文档- 那里也有很多东西!

你得到的错误表明通信渠道存在一些问题 - 出了问题,渠道已经"出现故障",即呈现无法使用.可能会发生很多原因,几乎没有任何信息,很难从远处诊断出来.

查看资源,看看这是否有助于您进一步 - 如果没有,我们将不得不从您那里获得更多信息!