Comment utiliser MSMQ dans WCF?
-
03-10-2019 - |
Question
Je peux travailler avec beaucoup de liaisons WCF, à l'exception netMsmqBinding
. Tout ce que je get est:
CommunicationObjectFaultedException: "L'objet de communication, System.ServiceModel.ServiceHost, ne peut pas être utilisé pour la communication car il est dans l'état Faulted"
à System.ServiceModel.Channels.CommunicationObject.Close (timeout TimeSpan)
Je l'ai essayé dans un Windows Server 2008 R2 avec les fonctionnalités suivantes installé
- Message Queuing
- Services Message Queuing
- Message Queuing serveur
- Déclencheurs Message Queuing
- Support HTTP
- Multicast soutien
- Message Queuing Proxy DCOM
J'ai essayé aussi d'ajouter manuellement une file d'attente dans le privé Message Server Manager, mais il ne fonctionne pas.
J'utilise un service Windows pour héberger mon MSMQ. Mon contrat de service est
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; }
}
}
Et mon app.config contient
<endpoint
address="net.msmq://localhost/private/ServiceName"
binding="netMsmqBinding"
contract="MyCompany.Services.IServiceName"
bindingConfiguration="tolerant"
behaviorConfiguration="tolerant"
/>
et
<netMsmqBinding>
<binding name="tolerant"
maxReceivedMessageSize="2147483647"
>
<readerQuotas maxArrayLength="2147483647" />
<security mode="None"/>
</binding>
</netMsmqBinding>
La solution
Le meilleur point de départ serait de trois post blog partiel Tom Hollander: