本文轉載:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html
昨天在用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/
WCF服務部署到IIS上,然后通過web服務引用方式出現錯誤的解決辦法;如果wcf服務沒有托管在IIS上,只是在本地瀏覽方式托管后通過web服務引用方式是沒有這樣的問題。
問題描述是這樣的。
1、通過vs自帶的wcf服務DEMO,發布到IIS 上去的時候,通過web服務引用時候出錯。
2、WCF客戶端通過web服務引用時候,http://10.198.1.21:8089/Service1.svc 一直無法正常的添加引用。
然而通過http://10.198.1.21:8089/Service1.svc?wsdl 是可以正確的查看元數據信息。
3、 最終解決辦法是:原因就是IIS進程的用戶沒有訪問Windows\Temp目錄的權限。找到Temp目錄,然后找到IIS_USER用戶,授權即可。
為Temp目錄條件IIS_USER用戶。
添加方法如下截圖:
5、修改Temp目錄后,成功添加web服務引用: