2011-06-08 92 views
0

寫入私人消息隊列在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的任何問題?

感謝您的幫助!

+0

有沒有可能這個問題是一個IPv6問題,而不是操作系統問題? – Mutt 2011-06-08 14:34:49

+0

@Mutt,我會如何診斷?看來我的機器同時擁有IPv4和IPv6。如果我禁用IPv6,會不會導致我過度的悲傷?我相信我們的網絡正在使用所有的IPv4地址。 – 2011-06-08 15:00:10

+0

我檢查了事件日誌,MSMQ沒有提出有關偵聽IPv4或IPv6地址的任何錯誤。另外,我沒有在隊列FormatName中使用IP地址,所以我不認爲這是我的問題。 – 2011-06-08 15:09:42

回答

0

不知道發生了什麼,但我刪除了現有的隊列,創建了一個新的隊列,現在一切正常。感謝您的建議。

+0

這很奇怪。你可以做什麼 - 如果你有一個備份 - 就是比較\ msmq \ storage \ lqs文件夾中的配置文件,查看是否有配置差異在UI中不明顯。 – 2011-06-09 12:08:34