题
我可以使用许多WCF绑定,除了 netMsmqBinding
. 。我得到的是:
CommunicationObjectFaultedException:“通信对象,System.ServiceModel.ServiceHost,由于处于故障状态,因此不能用于通信。”
在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; }
}
}
和我的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>
解决方案
最好的起点是汤姆·霍兰德(Tom Hollander)的三部分博客文章:
并很好地了解MSDN文档 WCF中的队列 - 那里也有很多东西!
您遇到的错误会表明通信渠道的某些问题 - 出了问题,该频道已“故障”,即使无法使用。可能会发生很多原因,几乎没有任何信息很难从远处诊断出来。
查看资源,看看是否可以进一步帮助您一两步 - 如果没有,我们必须从您那里获得更多信息!
不隶属于 StackOverflow