我有一個本地專用隊列。我還有一個MVC應用程序內的WCF服務,該應用程序使用msmqIntegrationBinding監聽隊列。問題在於,當消息排隊時服務契約永遠不會被調用,但消息在此後消失。該消息不在毒物隊列中。這裏就是我宣佈綁定到隊列的配置部分:MSMQ,消息放入隊列並消失,但從未被服務合同拾起
<services>
<service name="SkruvInfo.Web.Service.QueueMessageReceiver">
<endpoint address="msmq.formatname:DIRECT=OS:LEIA\private$\screwinfo_autotests_messagequeue"
binding="msmqIntegrationBinding"
bindingConfiguration="MsmqBinding"
contract="SkruvInfo.Web.Service.IQueueMessageReceiver" />
</service>
</services>
,這裏是合同:
[ServiceContract(Namespace = "http://localhost/SkruvWeb/Service")]
public interface IQueueMessageReceiver
{
[OperationContract(IsOneWay = true, Action = "*")]
void PutScrewInfoMessage(MsmqMessage<string> msg);
}
這裏是在服務的方法:
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void PutScrewInfoMessage(System.ServiceModel.MsmqIntegration.MsmqMessage<string> msg)
{
log4net.Config.XmlConfigurator.Configure();
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
try
{
log.Debug("Message from queue: " + msg.Body.ToString(CultureInfo.InvariantCulture));
var xDoc = new XmlDocument();
xDoc.LoadXml(msg.Body);
CacheScrewInfoModelFromScrewInfoXmlDoc(xDoc);
}
catch (Exception e)
{
log.Error("Error parsing message from queue",e);
EventLog.WriteEntry("Application","Message error for screws");
}
}
爲什麼消息消失但不調用服務的任何建議?
作爲一個感興趣的問題,爲什麼使用MsmqIntegrationBinding?您的隊列客戶端是否在傳統平臺上? – 2012-07-25 09:19:17