キュー内の最新のメッセージ(msmq)からのデータを公開することになっているアクションを持つコントローラーを持つMVCアプリがあります。ローカルマシンにプライベートキューを追加しました。メッセージが追加されたときに、アプリケーションがキューからメッセージを自動的に受信するようにしたい。このために、アプリケーションに追加されたWCFサービスでmsmqIntegrationBindingを使用しています。コントラクトでメッセージを受け取るメソッドは、クライアントが最新のデータを要求したときにアクセスできるように、メッセージをアプリケーションキャッシュに保存することになっています。
私が今直面している課題は、キューにメッセージを追加したときに、WCFサービスによってメッセージが取得されないことです。間違っている可能性のあることについてのガイダンスや、アプローチに関するフィードバックが必要です。助けてください。
以下は、WCFサービスのendpoint-configです。
<bindings>
<msmqIntegrationBinding>
<binding name="MsmqBinding">
<security mode="None" />
</binding>
</msmqIntegrationBinding>
</bindings>
<services>
<service name="TestApp.Web.Service.QueueMessageReceiver">
<endpoint address="msmq.formatname:DIRECT=OS:.\private$\testsmessagequeue"
binding="msmqIntegrationBinding"
bindingConfiguration="MsmqBinding"
contract="TestApp.Web.Service.IQueueMessageReceiver" />
</service>
</services>
そして、次のコードはQueueMessageReceiver.csWCFサービスからのものです。
public class QueueMessageReceiver : IQueueMessageReceiver
{
private static readonly XmlSerializer Serializer = new XmlSerializer(typeof(ScrewInfoModel));
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void PutScrewInfoMessage(System.ServiceModel.MsmqIntegration.MsmqMessage<System.Xml.XmlDocument> msg)
{
CacheScrewInfoModelFromScrewInfoXmlDoc(msg.Body);
}
private static void CacheScrewInfoModelFromScrewInfoXmlDoc(XmlNode screwInfoXmlDoc)
{
var reader = new StringReader(screwInfoXmlDoc.InnerXml);
var screwInfoModel = (ScrewInfoModel)Serializer.Deserialize(reader);
Common.Utils.CacheScrewInfo(screwInfoModel);
}
}
そして、これがWCFのインターフェースです。
[ServiceContract]
public interface IQueueMessageReceiver
{
[OperationContract(IsOneWay = true, Action = "*")]
void PutScrewInfoMessage(MsmqMessage<XmlDocument> msg);
}