寫入私人消息隊列在Windows 7 64位I具有在.NET 2.0 VB Web服務應用程序的web方法以下代碼:問題從.NET 2.0 Web服務
<WebMethod()> _
Public Function UpdateCall(<System.Xml.Serialization.XmlElement("CallChangeRequest")> ByVal callChange As CallChangeMessage) As Boolean
Dim result As Boolean = False
Dim mq As System.Messaging.MessageQueue = Nothing
Dim msg As System.Messaging.Message = Nothing
Try
mq = New System.Messaging.MessageQueue(System.Configuration.ConfigurationManager.AppSettings("queueName"))
mq.Formatter = New System.Messaging.XmlMessageFormatter(New Type() {GetType(CallChangeMessage)})
msg = New System.Messaging.Message(callChange)
msg.Recoverable = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings("recoverableMessages"))
mq.Send(msg)
result = True
Catch ex As Exception
Finally
If Not (msg Is Nothing) Then msg.Dispose()
If Not (mq Is Nothing) Then mq.Dispose()
End Try
Return result
End Function
此代碼正確地序列化我的對象,並將XML消息寫入運行Windows XP Pro 32位的舊本地開發計算機上的消息隊列。它也可以在生產服務器上正確執行。升級到Windows 7 64位後,此代碼將不再將XML消息寫入消息隊列中。對msg.Send(msg)的調用不會引發異常,所以我的web方法向調用者返回true。但是,沒有消息寫入隊列,所以代碼只是悄然失敗。
郵件被標記爲可恢復,並且隊列名稱爲FormatName:DIRECT = OS:。\ private $ \ inbounddata。我已經開放了基本上每個人都可以做的一切權限。如果有權限問題,我希望得到某種例外,所以我不認爲我有權限問題。 Web服務正在運行在針對2.0框架的應用程序池中,管理流水線模式設置爲Classic。
到目前爲止,我的方法是將代碼部署在我舊的開發箱上,但我仍然無法這麼做。我的代碼是否有問題導致它失敗?有沒有人知道從32位.NET 2.0框架應用程序寫入Windows 7 64位MSMQ的任何問題?
感謝您的幫助!
有沒有可能這個問題是一個IPv6問題,而不是操作系統問題? – Mutt 2011-06-08 14:34:49
@Mutt,我會如何診斷?看來我的機器同時擁有IPv4和IPv6。如果我禁用IPv6,會不會導致我過度的悲傷?我相信我們的網絡正在使用所有的IPv4地址。 – 2011-06-08 15:00:10
我檢查了事件日誌,MSMQ沒有提出有關偵聽IPv4或IPv6地址的任何錯誤。另外,我沒有在隊列FormatName中使用IP地址,所以我不認爲這是我的問題。 – 2011-06-08 15:09:42