WCF 無法從http://XXX/XXX.svc?wsdl獲取元數據”錯誤的解決方法

“無法從http://XXX/XXX.svc?wsdl獲取元數據”錯誤的解決方法
    

昨天在用IIS部署一個WCF服務時,碰到了如下錯誤:

理解了文檔內容,但無法進行處理。
- WSDL 文檔包含無法解析的鏈接。
- 下載“http://admin-pc/IISHostService/Service1.svc?xsd=xsd0”時出錯。
- 基礎連接已經關閉: 接收時發生錯誤。
- 無法從傳輸連接中讀取數據: 遠程主機強迫關閉了一個現有的連接。。
- 遠程主機強迫關閉了一個現有的連接。
元數據包含無法解析的引用:“http://admin-pc/IISHostService/Service1.svc?wsdl”。
元數據包含無法解析的引用:“http://admin-pc/IISHostService/Service1.svc?wsdl”。
如果該服務已在當前解決方案中定義,請嘗試生成該解決方案,然後再次添加服務引用。

該錯誤是在使用svcutil生成client代碼時報的錯誤,服務是部署在IIS7上,部署的過程都是完全教科書式的進行。服務也正常啓動了,顯示如下內容

已創建服務。

若要測試此服務,需要創建一個客戶端,並將其用於調用該服務。可以使用下列語法,從命令行中使用 svcutil.exe 工具來進行此操作:

svcutil.exe http://leo-pc/IISHostService/Service1.svc?wsdl

按照提示直接用svcutil.exe http://admin-pc/IISHostService/Service1.svc?wsdl命令去生成代碼,就出現了開頭說的那個錯誤。而如果用visual studio的webdevserver啓動,則一切正常。

經過一輪谷百之後,發現網上有很多類似的情況,有的說是因爲用了wsHttpBinding協議引起的,或者是元數據沒有正確公開,但都不是他們說的情況。後來找到了一篇文章,說的是添加WCF引用的一個陷阱。裏面提到的情形跟我遇到的一致,原來問題出在權限,難怪用webdevserver可以很正常的運行。原來在下載http://admin-pc/IISHostService/Service1.svc?xsd=xsd0時的權限不足,在瀏覽器直接訪問這個url會提示找不到頁面。原因就是IIS進程的用戶沒有訪問Windows\Temp目錄的權限。找到Temp目錄,然後找到IIS_USER用戶,授權即可。

具體可參考:http://merill.net/2008/04/wcf-add-service-reference-gotcha-with-windows-server/

轉自:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章