我在Windows服務(.NET C#)中有一個計時器。我需要能夠從外部程序中更改經過的值。如果定時器當前正在運行,我需要能夠縮短來自外部程序的時間經過值。我正在考慮在服務中使用一個公共方法來改變計時器的過期值並重新啓動計時器,但是外部程序是否可以在Windows服務上調用公共方法?調用Windows服務的公共方法
回答
總之,不可能在另一個進程中直接調用函數。包含您想要訪問的函數(在本例中爲Windows服務)的進程需要通過某種IPC(進程間通信)來公開它。您選擇哪種類型的IPC可能取決於通信的複雜程度以及「客戶端」是否爲.NET應用程序。
如果您的需求很簡單(例如只設置一個計時器值),或者如果您的客戶端不使用.NET,那麼使用命名管道(或TCP,如果您需要從另一臺物理機器訪問服務)最好的選擇。命名管道和TCP都爲您提供了一個Stream,您可以將消息寫入另一端並在其上讀取。
如果您需要公開許多不同的函數或發送和接收復雜的數據類型,並且如果您在兩端都使用.NET,.NET Remoting或WCF可能是最好的。 .NET Remoting更簡單,但有更多的限制; WCF非常靈活,但學習曲線陡峭。
您不能直接在Windows服務進程中調用方法,但可以讓Windows服務將此函數作爲WCF服務公開。 Windows服務也將充當服務主機。這是可能的,並不複雜。
是的,這是可能的。
您可能需要考慮在您的服務上創建NetNamedPipe端點並通過該接口控制服務。
NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);
MyService未使用2個參數.. – 2013-11-21 06:40:22
舊的(非WCF)服務可以使用.NET Remoting。有關如何開始的一些信息,請看看here。這是WCF之前的跨進程邊界的應用程序之間進行通信的方式。
- 1. 從公共服務方法調用活動時的NullPointerException
- 2. 調用公共方法
- 3. 安裝Windows服務Skype的公共API
- 4. 如何在Clojure中調用公共類的非公共方法?
- 5. 調用Windows窗體中的公共方法
- 6. Windows 7作爲公共服務器
- 7. 調用公共方法導致NullPointerException - Android
- 8. 盲目地調用公共方法(C#)
- 9. PHP限制調用公共方法
- 10. 的Windows服務的調用OnStop()方法不會被調用
- 11. 在Web服務方法之間使用公共屬性
- 12. 調用公共方法中的方法與此指針
- 13. Python:公共方法調用他們的'兄弟'私有方法
- 14. Java:反射調用實現公共接口的非公共類中的方法
- 15. Rhino Mocks驗證私有方法是從公共方法調用
- 16. 公共Modbus服務器
- 17. 公共CLSI服務器
- 18. 公共SOAP Web服務
- 19. 從共享服務調用組件的方法
- 20. 如何在服務中創建公共方法
- 21. 公共靜態方法vs公共方法
- 22. 無法從子實例調用基類的公共方法
- 23. 模擬的公共方法
- 24. 無法從Windows Phone 7模擬器調用WCF服務方法
- 25. 嘲笑ClassUnderTest |中的公共方法調用用的ArrayList
- 26. 無法公開ADO.NET數據服務中的服務方法
- 27. 防止公共服務過度使用
- 28. 如何使用公共asmx服務
- 29. 在執行時調用Windows服務的方法
- 30. 如何在Windows服務(c#)中調用我的方法?
.NET Remoting被認爲是傳統技術,不建議用於新開發(http://msdn.microsoft.com/zh-cn/library/72x4h507%28VS.85% 29.aspx)。 Windows Communication Foundation(WCF)是批准的方式。如果您不熟悉WCF,請觀看此視頻(http://www.dnrtv.com/default.aspx?showNum=135)以獲取該技術的介紹。 – 2009-12-09 14:38:29