2010-10-12 70 views
2

我目前正在開發一個Web服務實現到一個組合的Web /桌面應用程序(即來自不同來源的訪問)。在Web服務中的數據庫訪問

現在有兩個問題,我真的不能找到一個答案:

  1. 我將如何訪問數據庫以正確的方式(靜態類單身DI???)?我沒有找到關於在DI容器中使用Web服務來幫助訪問數據庫的任何信息。

  2. 寫入訪問權限如何?這是提供寫入數據庫的可能性的正確方法嗎?當然,這些請求將被用戶ID和密鑰保護。

注意:這不是wcf,而是正常的web服務(即asmx文件擴展名)。

+1

實際上,WCF是「普通」網絡服務 - ASMX現在被認爲是微軟的「傳統技術」。 – 2010-10-12 20:23:00

+0

是的,我意識到這一點,但單聲道WCF的已知問題清單是巨大的。 – Femaref 2010-10-12 20:46:48

+1

我投ASMX爲「正常」,原因與手動換檔變速器稱爲「標準」相同。 – MusiGenesis 2010-10-12 20:51:55

回答

1

從Web服務訪問數據庫有很多「正確」的方法。就個人而言,我經常在一個靜態類(或者更確切地說,有很多靜態方法的類)中使用ADO.NET,它通常返回一個DataTable(包裝在DataSet中,可以序列化,因此可以輕鬆地從Web服務返回)。你也可以使用ORM(比如NHibernate),儘管這些總是比ADO.NET有更大的開銷,因此是服務器上潛在的負載問題的來源。

沒有特別的理由不允許從您的Web服務對您的數據庫進行寫入訪問。如果您的應用程序設計需要寫入數據庫(顯然是一個相當常見的要求),那麼從Web服務完成這一切完全沒問題。

+0

你如何解決併發寫入訪問?只需在ado.net中使用交易? – Femaref 2010-10-12 20:47:42

+0

併發寫入在ADO.NET中不是特別的問題。您可能會遇到後續用戶覆蓋先前用戶數據的情況,但這不是ADO.NET或Web服務特有的問題。 – MusiGenesis 2010-10-12 20:57:16

+0

我同意Musi:只要你對「最後獲勝」功能確定,併發寫入應該不成問題。然而,如果你的要求是「最後一擊」會有問題,那麼你需要研究樂觀鎖定或悲觀鎖定的技巧。無論您實施哪種鎖定方案,它都會比簡單的最後贏得方法更復雜。 – mikemanne 2010-10-13 16:53:37