私は、着信メッセージを処理し、そこに含まれる XML を解析し、データをデータベース テーブルに転記する C# WCF サービスを作成しました。
WCF MSMQ サービスの実装をホストする Windows サービスを開始すると、1 つのメッセージが正常に処理された後、停止します。
これは、名前の変更を開始するまで、キュー内のすべてのメッセージを処理するために使用されていました。それは呼び出されるので、私は少し途方に暮れていますが、一度だけです。イベント ログにエラーは記録されません。Window Service ホストは実行を継続し、SCM からのサービス停止命令に迅速に応答します。
<netMsmqBinding>
<binding name="Binding.MSMQ.TransportSecurity" maxReceivedMessageSize="32767">
<readerQuotas maxBytesPerRead="32767" maxStringContentLength="32767" maxArrayLength="32767"/>
<security mode="Transport">
<transport msmqAuthenticationMode="None" msmqEncryptionAlgorithm="RC4Stream"
msmqProtectionLevel="None" msmqSecureHashAlgorithm="Sha1" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netMsmqBinding>
...
<services>
<service behaviorConfiguration="Behavior.CommonSense.ChapterWriter"
name="CommonSense.ChapterWriter">
<endpoint address="net.msmq://localhost/private/bob.logwriter"
binding="netMsmqBinding" bindingConfiguration="Binding.MSMQ.TransportSecurity"
name="Endpoint.CommonSense.ChapterWriter.msmq" contract="CommonSense.IChapterWriter">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/CommonSense/ChapterWriter/" />
</baseAddresses>
</host>
</service>
</services>
...
using System.ServiceModel;
namespace CommonSense
{
[ServiceContract]
public interface IChapterWriter
{
[OperationContract(IsOneWay = true)]
void Write(string xml);
}
}