我需要在應用程序中的特定事件上調用外部Web服務。我不想修改我的應用程序並使該外部Web服務的任何依賴關係。所以,我需要想辦法用某種外部組件來做到這一點。從SQL CLR調用Web服務時可能出現的性能問題
一種可能的方法是,當我的應用程序發生某些事件時,我將製作數據庫視圖。然後我將在該視圖上設置觸發器,它將調用CLR函數。在那個CLR函數中,我將調用外部Web服務。通過這樣做,我將得到「實時」的整合,這很好。但是,這種方法有缺點。主要的一點是,從CLR調用Web服務似乎不是一個好主意,因爲它會阻塞主SQL線程(?!),直到CLR收到一些答案。
到現在爲止,我只發現設置該屬性會遇到性能問題的幫助:
System.Net.ServicePointManager.DefaultConnectionLimit = 9999
更多關於它,你可以找到here。
現在,既然您知道我的需求(即實時或至少接近實時的集成,而不需要從我的應用程序調用到外部Web服務),那麼有沒有更好的方法來實現它?
我能想到的另一種方法是有一些服務,它會定期檢查我的數據庫中需要觸發外部Web服務調用的更改。一旦該服務檢測到這種變化,它將調用Web服務並傳輸數據。這當然不是真正的實時融合。我必須承認,除了性能問題之外,我更喜歡觸發器和CLR,因爲它保證了實時集成並且對我的應用程序無任何影響。
感謝的建議,我會考慮他們。更改應用程序不是一種選擇,因爲它更像是一種產品。因此,與特定部署相關的任何細節都是作爲一些外部組件,服務或類似的。 – buhtla
不幸的是,Service Broker因爲我只使用SQL Express版本而不在使用。 – buhtla
在這種情況下,嘗試查看總線選項,如果總線太重,異步隊列應該有所幫助。 –