2010-06-01 53 views
10

我有.NET 4.0的應用程序從.NET 3.5移植使用net.msmq於2008年64服務器MSMQ WCF激活碼發放2008

設置

  • net.msmq服務與運行地址 「net.msmq://localhost/private/msmqdataservice.svc」
  • net.msmq具有地址 「net.msmq://localhost/private/msmqdataservice.svc」 endpoing
  • 隊列中MSMQ - >名= 「$ private \ msmqdataservice.svc」

現在,一切正在與生產.net 3.5的生產。

我在服務器上安裝了.net 4.0,並創建了新站點以便在同一個盒子上進行分段。

新的分期MSMQ安裝與地址

  • net.msmq服務:
  • net.msmq地址爲「淨endpoing 「net.msmq //localhost/private/staging/msmqdataservice.svc」。 MSMQ://localhost/private/staging/msmqdataservice.svc」在MSMQ
  • 隊列 - > NAME = 「$私人\分期/ msmqdataservice.svc」

創建另一個隊列對不同的網站。

我用新網站做的另一個改變是這是不同的網站在iis上偵聽不同的IP地址。我已將net.msmq綁定到'localhost'。主站點對net.msmq - >'localhost'具有相同的綁定。我認爲這是應該的。請指出是否需要一些不同的配置。

問題是我的請求,正在進入隊列,但沒有得到通過應用拿起它就停在那兒

沒有的任何錯誤日誌指示。只有我在日誌中看到的與此有關的警告是「msmqactivation無法發現隊列」。雖然這個警告我從來沒有正確理解,因爲我們已經看到這與3.5中的msmq一切正常。

我能想到的任何事情都經過驗證,它是正確的。

  • 應用程序的應用程序池作爲網絡服務運行,並且它具有對隊列的完全訪問權限。
  • net.msmq激活服務與網絡服務運行服務URL的
  • 嘗試了不同的命名約定以相同的結果

摘要

請提供任何洞察到多個站點的設置與淨。 MSMQ。我爲這兩個站點使用net.msmq與value ='localhost'的綁定。我認爲它是機器名稱身份。

任何方式來診斷這個問題?

任何其他你可能想到的事情可能會有所幫助。

昨天我們不得不推遲發佈,因爲花了100個小時後,我們無法弄清楚問題所在。也不能讓它在我的開發機器中破解。

編輯

問題是,創造新的站點命名後約定不喜歡

net.msmq服務與地址「net.msmq://localhost/private/staging/msmqdataservice.svc」工作 net.msmq地址爲 「net.msmq://localhost/private/staging/msmqdataservice.svc」 endpoing 隊列MSMQ - > NAME = 「$私人\分期/ msmqdataservice.svc」

它的服務名工作 net.msmq://localhost/private/msmqdataservice.svc

但現在我不能有兩個網站使用完全相同的端點。

任何方式有兩個不同的網站有不同的網址和不同的隊列在同一臺機器中具有相同的端點?

回答

0

如何使用不同的端口?您可以使用相同的主機名並告訴WAS在新的vdir或站點中的新端口上激活。

+0

Msmq prortocol沒有端口選項。 – 2011-06-11 15:24:50

0

不幸的是,偵聽器使用的服務名稱,以確定哪個隊列偵聽因此,如果您接收服務被稱爲

MYOrganisation.Services.MyService.svc 

您的隊列應該叫

net.msmq://localhost/MYOrganisation.Services/MyService.svc 

因此,隊列稱爲:

MYOrganisation.Services/MyService.svc 

試試這個,並找回我。我可以發佈一個完整的配置示例。

即使你沒有2個不同的端點,你也可能擁有相同的服務,使用不同的名字空間(或者只是重命名服務)來監聽不同的隊列。不理想,但這是我發現的唯一工作。

0

您的服務端點的URI必須匹配(或多或少,參見http://msdn.microsoft.com/en-us/library/ms789042.aspx)隊列名稱。所以在這裏,解決方案是創建一個名爲staging的虛擬目錄,並將您的服務放在那裏。

至於綁定信息,本地主機指向服務器是隊列監聽器,因此如果你的隊列與IIS安裝在同一臺機器上,那麼這個監聽器確實是localhost。

3

對我來說,修復方法是安裝AppFabric for Windows Server v1.1。 (對於使用WAS/IIS託管的WCF服務或WF應用程序的任何人都必須使用。)

這也解決了每次創建非WCF隊列時WAS進程崩潰的問題。剛剛在實時調試器被扔這樣的:

System.ServiceModel.EndpointNotFoundException was unhandled 
     Message=The service '~/nonWcfQueueName' does not exist. 
     Source=System.ServiceModel.Activation 
     StackTrace: 
      at System.ServiceModel.ServiceHostingEnvironment.NormalizeVirtualPath(String virtualPath) 
      at System.ServiceModel.Channels.MsmqHostedTransportManager.HostedBindingFilter.MatchFound(String host, String name, Boolean isPrivate) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.MatchQueue(MatchState state) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.ProcessFoundQueues(MessageQueue[] queues, Dictionary`2 knownQueues, Boolean isPrivate) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.OnTimer(Object state) 
      at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
      at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
      at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
     InnerException: 

我想沒有多少人需要在同一臺機器上混合WCF /非WCF隊列。希望這可以幫助人們擺脫過去一週所經歷的痛苦!

+1

teoduolog你是男人! – 2012-10-05 20:05:39

0

另外一個有趣的一點:net.msmq列表適配器服務似乎緩存了它無法訪問隊列的事實。如果它嘗試訪問您的服務的隊列並失敗,然後添加net.msmq偵聽器適配器的權限,它仍然無法工作。我重新啓動了該服務,然後再次觀看隊列。