2011-05-12 123 views
14

我有本地網絡上的SQL Server數據庫和Intranet Web應用程序。 Intranet Web應用程序創建記錄並將其發送到數據庫。我有一個Internet Web應用程序,我想將新記錄發送到使用本地網絡上的SQL Server數據庫。SQL Server可以發送Web請求嗎?

我不能改變/修改以各種理由在Intranet Web應用程序,所以我唯一的選擇是創建本地SQL Server將使用某種形式的HTTP POST發送的新記錄互聯網web應用上觸發請求或網址調用。

INTERNET Web應用程序使用RESTful API設置,可以通過表單發佈到公共訪問的URL(例如http://www.example.com/records/new)接收新記錄。

有誰知道通過一個URL發送數據(xml,json,普通變量在url中)是否可以在SQL Server中完成?

感謝您的任何想法!

回答

7

作爲一個很好的(相當可靠和可擴展的)選項,您可以使用SQL CLR與Web應用程序/ Web服務進行交互。例如,SQL CLR WebRequestSQL CLR WCF

+1

或SSIS - Integration Services。 – 2011-05-12 19:50:22

+0

@marc_s:從我不是非常到達的經驗來看,SSIS是更復雜的主題,然後SQLCLR – abatishchev 2011-05-12 19:57:42

+0

@marc_s同樣對於SSIS,最終不得不編寫C#,因爲它通常不夠靈活。 – John 2017-05-26 06:37:41

13

這是可能的,但在現實世界中比您想象的天真方法稍微複雜一些。首先,它是不能接受的具有觸發等待HTTP請求:

  • 其一,你的應用將抓取一個急剎車,因爲觸發器將阻止資源(主要鎖)等待來自一些遠和響應離開WWW服務。
  • 其次,更微妙但更糟糕的是存在回滾時的正確性問題。如果發送給HTTP請求的事務回滾,則無法「撤消」HTTP請求。

解決方法是通過隊列將觸發器與HTTP請求分離。觸發器將請求排入本地隊列並提交,而單獨的一部分處理將這些請求出列併發出HTTP請求。這解決了上述兩個問題。您可以使用普通表作爲隊列(請參閱Using Tables as Queues),或者您可以使用Service Broker,兩者均可正常工作。

現在就如何將這些請求出隊並實際放置HTTP調用,我強烈建議使用專用進程(即專用於此目的的應用程序)。雖然可以使用SQLCLR,但這是一個非常糟糕的選擇。 SQL Server資源(特別是workers)在等待Internet響應時浪費寶貴。

+0

我並未等待http請求。我希望觸發器啓動http請求。我希望觸發器在新記錄更新時調用URL。我不需要等待響應或類似的信息 – 2011-05-16 14:09:39

+1

但是,該觸發器將等待http請求。觸發器將在插入/更新時執行,並且只有在觸發器完成執行時纔會執行插入/更新操作,並「完成」插入/更新過程。這一切都是同步發生的。觸發器應儘可能最小和儘可能快。如果可能的話,不要使用觸發器,除非將審計類型數據轉儲到另一個表。 – 2014-08-19 17:48:34

0

添加到Remus Rusanu的好回答。並與Lehi Sanchez的評論有關。問題是你總是需要等待http請求。觸發器中的代碼是一步一步執行的,所以請求必須返回,以便觸發器可以完成其執行。