2012-09-20 28 views
1

是否可以編寫可由第三方應用程序處理的自定義事件?編寫可供第三方應用程序使用的自定義事件

我們有一個現有的應用程序,我們發現許多使用該應用程序的人正在使用sql觸發器在應用程序中發生事件時自定義自定義功能。

由於僞劣的第三方觸發器阻止我們的應用程序,這導致我們自己的進程減慢了一些實例。

我在想如果我們可以在自己的服務或應用程序中引發可以處理的事件,而不必使用觸發器,我們可以使第三方開發者更容易。

這樣我們就會失去阻塞,因爲我們可以將事件觸發並繼續。另外,它們的緩慢/潛在崩潰也會發生在我們的流程之外。

A)這是一個合理的方法嗎?

B)這可能嗎?我可以將事件範圍超出我的應用程序範圍嗎?

編輯

因爲我已經發現了其他相關問題感興趣:

  1. wcf cross application communication
  2. Interprocess pubsub without network dependency
  3. Listen for events in another application(這似乎很接近我後,我)

我想我在尋找最簡單的方法,但如果我們想在多個公司內的其他應用程序的採用這種方法,我們就會有一些進一步的挑戰:

我們在VB6和德爾福一些舊的應用程序 - 我希望能夠在我的(或第三方)更新的C#應用​​程序或服務中聽取他們的活動。

現在,我來看看: Managed Spyhttp://pubsub.codeplex.com

+1

我認爲這是可能的,但他們需要位於外部程序集中,您應該與第三方開發人員共享。我想知道如何做到這一點。 –

+2

事件可能不是最好的辦法,特別是當你的應用程序作爲可執行文件或服務運行時。看看[託管擴展框架](http://msdn.microsoft.com/en-us/library/dd460648.aspx) –

回答

1

沒有,事件僅由的加載到自己的進程代碼可用。如果你現在不相信這些人,你真的不想讓自己暴露於你加載到你自己的進程中的劣質代碼,並拋出終止你的應用程序的未處理的異常。你會接到電話,而不是他們。此外,他們會使用這樣的事件來運行代碼,這會降低您的應用速度。

一般來說,你對一個dbase所做的任何事情都將以完全不可預測的開銷運行。不僅僅是因爲其他人添加觸發器,dbase服務器可能會因其他工作而陷入困境,並隨着時間的推移而自然減慢,因爲它存儲越來越多的數據。確保不會讓您的應用程序變得困難或不愉快,dbase操作通常必須在工作線程上運行,或者與BeginExecuteXxxx()異步執行。並且在你的用戶界面中顯而易見,dbase服務器會阻止進度,而不是你編寫的任何代碼。讓你不必做大量的解釋。

1

你要做的是基本上發送消息到其他進程。爲此,您需要某種IPC機制。由於聽起來您的每封郵件都有多個聽衆,所以mailslot可能是最好的方式。不幸的是,.NET沒有內置的郵槽支持,所以你必須使用P/Invoke

如果您正在尋找內置解決方案,那麼您可以使用命名管道,WCF,.NET Remoting或裸TCP或UDP。然而,有了這些,你必須循環遍歷所有的聽衆,並且一次發送一條消息給他們每個人,這不是什麼大不了的事情,但是保持單獨的連接是多一點一個麻煩。

請注意,使用WCF和.NET Remoting,你幾乎限制了你的客戶使用.NET。如果您的客戶端可能是本地或其他平臺,那麼郵筒,命名管道和TCP/IP是您最好的選擇。

+0

謝謝你,我會試試看。我發現這可能有助於其他人:http://csharpmailslots.codeplex.com/ – Nils

相關問題