2009-10-28 65 views
0

對於我的應用程序,我正在使用Web服務來檢索我需要的XML格式的一些信息。現在我做的方法是通過HTTP web請求,所以代碼看起來是這樣的:添加.ashx作爲Web參考

serviceURL = "http://longurl/webservice.ashx?apikey=key&action=getDetail&id=ID"; 

HttpWReq = (HttpWebRequest)WebRequest.Create(serviceURL); 
HttpWResp = (HttpWebResponse)HttpWReq.GetResponse(); 

dataXML.Load(HttpWResp.GetResponseStream()); 

我覺得包括我的代碼中的整個URL看起來很笨重,所以我想到的添加Web服務作爲Web引用。但是,當我嘗試添加Web引用時遇到了此錯誤:

URL longurl/webservice.ashx上的文檔未被識別爲已知文檔類型。
來自每個已知類型的錯誤消息可能會幫助您解決問題:
- 來自'DISCO文檔'的報告是'無法找到URL longurl/webservice.ashx上的發現文檔'。 - 無法識別文檔格式。
- 來自'WSDL文檔'的報告是'XML文檔(2,2)有錯誤'。 - 沒有預料到。
- 來自'XML Schema'的報告是'W3C XML Schema的根元素應該是,其命名空間應該是''。'。

我在嘗試添加Web服務之前是否缺少必須執行的任何步驟?或者這是Web服務本身的問題?

我也很感激任何關於替代方法的建議,以更優雅的方式編寫代碼。謝謝。

回答

1

我老實說只是把這個URL放在AppSetting中。

這樣serviceURL = ConfigurationManager.AppSettings [「ServiceUrl」];

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

+0

啊,很酷。這似乎是將笨重的東西轉移的好方法。我可能不得不考慮加密存儲在裏面的敏感數據。 謝謝。 – Kronon 2009-10-28 08:44:45

+0

呃......我想他們已經想到了。您可以加密應用程序中的配置部分。 http://msdn.microsoft.com/en-us/library/ms998280.aspx 請注意,使用Reflector時,任何人都可以使用代碼中放置的任何字符串。 – Min 2009-10-28 18:24:30

0

A 「Web引用」 意爲 「舊式」 ASMX web服務, 「服務引用」 爲WCF服務。您不能使用(或濫用)該功能來執行您正在嘗試執行的操作。

要麼只是把你的URL配置爲「Min」建議,或者改爲真正的WCF服務。使用WCF Rest入門工具包,您可以輕鬆創建這些類型的「HTTP Plain Old Old(POX​​)」服務 - 有關該主題的更多信息,請參閱Pluralsight screencast

Marc

+0

感謝您的反饋。我一定會仔細看看你鏈接到的教程視頻,看看它提供了什麼。 – Kronon 2009-10-28 08:46:09

+0

我不知道你爲什麼把我的名字放在引號中... – Min 2009-10-28 18:25:34

+0

@Min:因爲Min可能會被誤解爲「最小」 - 把它放在引號中應該清楚地表明它是回答問題的其他人的名字。 – 2009-10-28 20:04:52