我有一個使用MSMQ託管在IIS上的WCF服務。我想創建一個Windows應用程序,它可以阻止WCF服務選擇MSMQ消息。一旦我看到隊列中的MSMQ消息,我需要單擊一個按鈕並啓動WCF服務以在MSMQ中選擇消息。代碼示例將會被修改。如何停止WCF服務(使用net.MSMQ綁定)從另一個Windows應用程序在IIS上託管
回答
我能夠通過應用解決方法來解決此問題。我在另一臺機器上創建了另一個隊列。在config中將WCF客戶端端點地址的地址更改爲此隊列。我創建了另一個外部應用程序,將消息從備用隊列移至實際隊列。因此,停止IIS託管WCF服務與MSMQ綁定的行爲已實現
現在我有另一個問題「如何停止WCF服務(與netTCP綁定)從另一個Windows應用程序的IIS託管」 – user1471309
IIS不是託管MSMQ客戶端的適當容器。這是因爲當低流量時應用程序池卸載時,隊列客戶端也會卸載。這種行爲是自動的,你無法控制它。
在Windows服務中託管你的客戶端會好得多。但是,您所需的那種「按需消費」功能並不容易實現,當然也不受標準綁定支持。
我可以建議的最好的方法就是在收到消息後立即使用消息,並將消息保存到某個位置,直到用戶單擊該按鈕,然後根據消息中的數據已經可用的情況執行任何操作。
可以通過編程方式停止IIS託管的WCF服務嗎? – user1471309
只能通過使用某種腳本停止/啓動應用程序池。但是,不確定這是否會奏效,即使這樣做,我認爲您目前的做法會在長期內給您帶來更多問題。 –
感謝您的評論。我必須開發一個演示來窺探現有的WCF服務和隊列。演示服務將像往常一樣運行 – user1471309
停止「Net.Msmq偵聽器適配器」Windows服務和「Windows進程激活服務」將停止消息被拉出隊列。備份服務的啓動將導致消息再次從隊列中拉出。我手動執行此操作,而不是通過另一個應用程序,但我認爲你可以通過另一個應用程序來完成。我還沒有完全測試這一點,但這樣的事情可能會工作:
Dictionary<string,List<string>> runningDependentServices = new Dictionary<string,List<string>>();
private void StartMsmqBinding()
{
StartService("WAS");
StartService("NetMsmqActivator");
}
private void StopMsmqBinding()
{
StopService("NetMsmqActivator");
StopService("WAS");
}
private void StartService(string serviceName)
{
List<string> previouslyRunningServices = null;
var sc = new ServiceController();
sc.ServiceName = serviceName;
if (runningDependentServices.ContainsKey(serviceName))
{
previouslyRunningServices = runningDependentServices[serviceName];
}
try
{
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
if(previouslyRunningServices != null)
{
previouslyRunningServices.ForEach(a =>
{
var serviceController = new System.ServiceProcess.ServiceController() { ServiceName = a };
serviceController.Start();
serviceController.WaitForStatus(ServiceControllerStatus.Running);
});
}
}
catch (InvalidOperationException)
{
}
}
private void StopService(string serviceName)
{
var sc = new System.ServiceProcess.ServiceController() { ServiceName = serviceName };
runningDependentServices[serviceName] = sc.DependentServices.Where(a => a.Status == System.ServiceProcess.ServiceControllerStatus.Running).Select(a => a.ServiceName).ToList();
if (sc.CanStop)
{
try
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
}
catch (InvalidOperationException)
{
}
}
}
我想類似的方法將用於net.tcp綁定工作。在這種情況下,您可能不得不停止「Net.Tcp偵聽程序適配器」Windows服務(ServiceName:「NetTcpActivator」)和「Windows進程激活服務」。
- 1. 在IIS中使用net.msmq綁定創建故障的WCF服務
- 2. IIS WCF服務託管與Windows服務
- 3. 在IIS中使用netTCP綁定託管的WCF服務
- 4. WCF服務託管在Windows服務+ Silverlight + Silverlight應用程序
- 5. 在IIS中託管WCF應用程序
- 6. 託管的Windows服務中託管的WCF服務使用WCF服務應用程序連接
- 7. 如何在應用程序上託管wcf服務器?
- 8. 如何在另一個WCF服務中託管WCF服務?
- 9. 如何使用Visual Studio在iis上託管wcf web服務
- 10. 64位Windows服務器上的WCF自託管應用程序
- 11. 託管WCF服務,從另一個PC
- 12. 在IIS上託管WCF服務
- 13. 在IIS上託管WCF服務
- 14. 在Windows服務中託管的WCF服務上使用證書
- 15. 如何在IIS託管的wcf上使用用戶定義的綁定?
- 16. 使用Powershell或WMI在IIS中託管停止/啓動服務
- 17. Windows窗體應用程序在Windows託管服務上運行
- 18. 如何在IIS7.5上託管自定義wcf應用程序(服務器)?
- 19. 使用net.msmq綁定激活帶MSMQ的IIS託管工作流程
- 20. .net Windows服務託管的WCF使用
- 21. 如何從線程停止Windows服務應用程序?
- 22. 與WCF的net.tcp綁定服務(託管在IIS 7)根據
- 23. 如何向IIS託管的WCF服務應用程序發出HTTP請求?
- 24. 如何將用戶的身份從一個IIS中託管的Web應用程序傳遞到託管在另一個IIS中的Web服務?
- 25. 在同一Web應用程序中託管WCF服務和WebAPI
- 26. 在我已經有一個Web站點的IIS 7上託管一個WCF服務應用程序
- 27. 如何在1個Windows服務中託管2個WCF服務?
- 28. 從IIS中託管的ASP.NET Web應用程序接收WCF回調服務
- 29. 如何從IIS託管的WCF服務啓動進程?
- 30. WCF Rest服務引用另一個應用程序託管的WCF服務。找不到默認端點?
就這麼你知道,它通常不是很好,所以要求響應者爲你編寫代碼。如果迴應者認爲他們的答案要求他們清楚,他們通常會提供代碼樣本。響應者也樂意審查你已經編寫的代碼。大多數人會希望你至少有一個在編寫自己的代碼。 –