Wie MSMQ in WCF zu benutzen?
-
03-10-2019 - |
Frage
kann ich mit vielen WCF-Bindungen arbeiten, außer netMsmqBinding
. Alles, was ich bekommen ist:
CommunicationObjectFaultedException: „Das Kommunikationsobjekt, System.ServiceModel.ServiceHost, kann nicht für die Kommunikation verwendet werden, da es in dem Fehlerzustand ist“
bei System.ServiceModel.Channels.CommunicationObject.Close (Timespan timeout)
Ich habe versucht, es in einem Windows Server 2008 R2 mit den folgenden installierten Funktionen
- Message Queuing
- Message Queuing-Dienste
- Message Queuing Server
- Message Queuing-Trigger
- HTTP-Unterstützung
- Multicastingunterstützung
- Message Queuing DCOM Proxy
Ich habe auch versucht, manuell eine private Message Queue im Server-Manager hinzuzufügen, aber es hat nicht funktioniert.
Ich bin mit einem Windows-Dienst meines MSMQ hosten. Mein Service-Vertrag ist
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; }
}
}
Und meine app.config enthält
<endpoint
address="net.msmq://localhost/private/ServiceName"
binding="netMsmqBinding"
contract="MyCompany.Services.IServiceName"
bindingConfiguration="tolerant"
behaviorConfiguration="tolerant"
/>
und
<netMsmqBinding>
<binding name="tolerant"
maxReceivedMessageSize="2147483647"
>
<readerQuotas maxArrayLength="2147483647" />
<security mode="None"/>
</binding>
</netMsmqBinding>
Lösung
Der beste Ausgangspunkt wäre dreiteiliger Blog-Post Tom Hollander sein: