2010-01-25 60 views
2

我很好奇我如何完成與web服務如下:接受數據與Webservice的C#.NET 3.5

  1. 驗證用戶。
  2. 接受CSV或XML文件。
  3. 處理文件並將其放入SQL數據庫中。

有人在上一篇文章中提到我應該使用web服務。我似乎無法找到解釋如何開始這樣的任何資源。所有簡單的示例似乎只是顯示如何在給定查詢的情況下爲XML服務。

我想知道如何接受的東西,以及如何這將不同於認證的網頁上的上傳控制。我不認爲我真的瞭解webservices及其好處。

用戶如何用我的webservice發送XML文件接口?

回答

1

Web服務並不適合發送任意文件。它可以完成,但如果這是您創建Web服務的唯一原因,那麼您可以堅持使用HTTP。

如果該文件有一個特定格式或特定內容那麼你可能要創建一個Web服務。 ASMX或WCF Web服務的目的是爲數據提供可發現性和強大的輸入(除其他外,但我堅持現在的基礎)。從客戶的角度出發,而不是試圖創造一些醜陋的XML或CSV BLOB和Chuck它通過HTTP,您使用POCO類的實際服務代理:在Java中

MyService service = new MyService(); 
MyData data = new MyData() { ID = 3, Name = "Test", Date = DateTime.Now }; 
service.Save(data); 

的Visual Studio(和等效工具一些其他平臺)會照顧爲你生成代理,所以你所要做的就是編寫上面的代碼。

但是,如果你只是想發送任何數據,這將不會讓你任何地方,因爲你不能生成原始XML的代理。那麼,你可以,但它只是一個XmlDocument,並沒有在可用性,類型安全性或可發現性方面完成任何事情。

不要被「XML Web服務」中的「XML」混淆。這不是一個傳送香草XML的工具。相反,XML是指消息的格式,因爲它是通過線路傳輸的,而不是POST字符串(id=3&name=Test&date=2010-01-24)或.NET Remoting中使用的二進制RPC調用。

在認證方面,如果您決定使用WCF,您只需使用正確的綁定。 WCF代理通常默認配置爲使用wsHttpBinding,該代理使用集成的Windows身份驗證來保護消息。同樣,假設您使用Visual Studio,除非您決定更改默認值,否則這些操作幾乎都會自動完成。

+0

好的,這樣做更有意義。這樣做的目的是告訴別人,我有一個web服務,這是你如何訪問它併發送數據。然後球在他們的球場上向我提供數據。在身份驗證方面,我想使用.NET SQL風格的網站身份驗證。 – Jason 2010-01-25 03:50:59

+0

典型的情況會是這樣嗎?我製作了一個web服務並在我的主機上運行它。當客戶想要向我發送數據時,他們會運行一個程序發出請求,並將數據發送到我的web服務,以查找他們添加的每個新項目(該程序將循環顯示項目)?那麼當我的webservice收到一個可以放入我的SQL數據庫的項目時,它會有一些類型的處理程序? – Jason 2010-01-25 03:53:18

+0

@Casoninabox:發送到/來自Web服務的消息應該是原子的。也就是說,一條消息定義了與特定請求或事務相關的所有數據,而不是在循環中多次調用該服務。除此之外 - 是的,只要發送的數據符合不變的特定格式,這將是一個典型的情況。另外,關於WCF服務的好處在於您不必*告訴他們如何發送數據,您只需告訴他們服務在哪裏(URL),並且可以生成代理。 – Aaronaught 2010-01-25 03:58:23

2

如果你想做大文件上傳,那麼Web服務可能會導致一些問題,因爲一些Web服務平臺(包括.NET)具有限制數據大小的默認設置。 Web服務的優勢在於它可以完成將請求映射到XML的所有映射,因此您可以返回.NET類型,並且不需要處理請求參數。 但是,您可能需要投入更多精力來維護狀態等。 對於登錄,您可以執行的操作是使用登錄函數返回某種標識符,該標識符可用於驗證用戶是否對該會話有效 - 這樣做的方法是在你的用戶表中爲lastActive和sessionGUID設置列,當他們登錄時,你生成一個新的sessionGUID並返回它,並且在那個以及任何其他有效的請求中,他們讓你更新lastActive,如果有一個請求在lastActive時間過後很長時間,那麼你拒絕請求......有很多類似的方法可以做到這一點,但希望你能得到一般想法 - 你不想每次都要求登錄細節,但是你可以生成一個臨時標識符並使​​用它。 對於接受XML文件,您希望使用類似XDocument或XMLReader的內容來讀取您收到的數據。假設您不是在討論Web服務本身使用的XML格式的解析,那麼您最有可能會收到一個字符串,然後將其推送到XDocument中,然後使用標準的XDocument函數處理數據。如果文檔很大,那麼XMLReader應該更高效。 對於閱讀CSV文件,有一些(免費和非免費的)CSV閱讀器可以幫助您避免一些可能遇到的問題,爲您提供一個用於處理一串或多串CSV數據的漂亮API。但是,如果您知道源數據沒有非結構化逗號,那麼您可以取出該字符串並用逗號分割,然後除去值的任何引號。不過,如果可能有地址或其他可能含有逗號的數據,那麼它往往會變得很快。 XML應該可以通過web服務傳遞 - 它應該被編碼和解碼,所以它會傳遞出符合的字符串。

至於將其存儲在數據庫中,有許多方法可以做到這一點 - 您可以使用ADO.NET將數據存儲在數據庫中而無需其他庫,可以在Visual Studio或SQL Server Management中創建數據庫結構Studio,然後使用SQLMetal或Linq to SQL來生成用於保存數據的類,可以使用第三方數據庫映射工具(如Castle ActiveRecord)或其他。這取決於你所知道的以及你願意學習多少。這與Web服務真的是分開的。當你在.NET中定義一個Web服務時,你可以使用標記爲Web服務的屬性來有效地定義標準函數,因此數據庫端是標準的。NET數據庫的東西,這與您爲ASP.NET網站或甚至桌面程序所做的事情沒有任何不同。

+0

+1很多很好的信息。我完全不清楚Web服務的所有部分。最終用戶如何啓動數據推送?他們是否在瀏覽器中訪問了一個頁面?以編程方式執行它?都?要麼?你是否知道構建這樣一個web服務的好資源可能會讓像我這樣的新手通過它? – Jason 2010-01-25 03:24:32

+0

Web服務通常會被程序調用。大多數框架都有創建Web服務的方法,您可以在其中輸入Web服務描述符的URL,然後以該編程語言的標準方式調用函數。例如,在.NET中,您需要添加一個Web引用,輸入Web服務的URL,然後是標準的C#/ VB.NET函數調用,並且您會從代碼中看到的是.NET類型 - Web服務實現處理膠水和類型序列化等。 通常不會從瀏覽器訪問Web服務。 – 2010-02-05 10:41:48

+0

在Visual Studio中,您有一個ASP.NET Web服務應用程序項目類型。創建一個,它將使用HelloWorld函數生成一個Web服務。運行該程序,檢查獲得的.asmx URL,並在另一個Visual Studio實例中創建一個新項目。添加服務參考,輸入.asmx URL,然後可以編寫如下代碼: var svc1 = new ServiceReference1.Service1SoapClient(); MessageBox.Show(svc1.HelloWorld()); 很明顯,這些使用默認的功能和名稱。然後開始入侵... – 2010-02-05 10:49:52