標籤:
最近由於項目需求,要做一個上傳檔案附件的功能,由於是多使用者訪問,所以這就用到了WCF服務,程式編寫完成就需要發布了,
下面記錄下發布到IIS的過程:
1,安裝IIS
第一步:檢查Windows7中IIS是否安裝了必要的組件
方法:控制台->程式和功能->開啟或關閉Windows功能
以片中標註的功能Windows7預設不會安裝的
第二步:檢查IIS的配置
系統必備安裝完成後開啟IIS服務管理員,點預設網站,雙擊“處理常式映射”如
檢查一下中紅色標註部分是否已經存在,否則WCF服務是無法調用的。不幸如果沒有找到這幾個"兄弟"的話方法如下
安裝註冊WCF組件
1)運行cmd命令列工具。(開始 ==> 運行 ==> cmd斷行符號)
(注意!!如果使用Windows Vista或7的話,務必使用administrator管理員身份運行,否則可能導致下面的操作無法繼續!)
2)進入WCF檔案夾:
cd C:\WINDOWS\Microsoft.NET\Framework\v3
.0\Windows Communication Foundation
3)運行ServiceModelReg.exe工具,會得到如下協助資訊:
C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation>Service
ModelReg
Microsoft(R) Windows Communication Foundation 安裝公用程式
[Microsoft (R) Windows (R) Communication Foundation, 版本 3.0.4506.2152]
著作權 (c) Microsoft Corporation。著作權所有,並保留一切權利。
管理一台電腦上的 Windows Communication Foundation
的安裝和卸載的管理公用程式
=================
用法:
ServiceModelReg.exe [-i[r | ru] | -u | -ua | -r | -s:<path> | -sn:<path>
| -k:<path> | -kn:<path> | -lv | -lk | -vi] [-y] [-x] [-q | -v] [-nologo]
[-?]
-i - 安裝此版本的 Windows Communication Foundation,並更新
IIS 中繼資料庫根處的指令碼映射和根以下的所有指令碼映射。
現有的較低版本的指令碼映射會升級至此版本。
-ir - 安裝此版本的 Windows Communication Foundation,
僅註冊。不要在 IIS 中安裝 Windows Communication Foundation
指令碼映射。
-iru - 安裝此版本的 Windows Communication Foundation。如果
存在使用 Windows Communication Foundation 的任何現有
應用程式,不要在 IIS 中更新它們的指令碼映射。
-u - 卸載此版本的 Windows Communication Foundation。
將此版本現有指令碼映射會重新對應到電腦上剩餘的
已安裝的最高版本的 Windows Communication Foundation。
-ua - 卸載電腦上所有版本的 Windows Communication Foundation。
-r - 重新安裝此版本的 Windows Communication Foundation,
並更新 IIS 中繼資料庫根處的指令碼映射和根以下的所有
指令碼映射。無論原始版本是什麼,都將現有的指令碼映射
升級到此版本。
-x - 包含作為該安裝操作一部分的 Windows Communication
Foundation 自訂動作指令碼。
-s:<path> - 在指定的路徑以非遞迴方式安裝此版本
的 Windows Communication Foundation。
例如,ServiceModelReg.exe -s:W3SVC/1/ROOT/SampleApp1
-sn:<path> - 在指定的路徑以非遞迴方式安裝
此版本的 Windows Communication Foundation。
-k:<path> - 從指定的路徑中以遞迴方式刪除所有版本的 Windows
Communication Foundation 的所有指令碼映射。
例如,ServiceModelReg.exe -k:W3SVC/1/ROOT/SampleApp1
-kn:<path> - 從指定的路徑中以非遞迴方式刪除 Windows Communication
Foundation 的所有版本的所有指令碼映射。
-lv - 列出在該電腦上安裝的所有版本的 Windows Communication
Foundation,以及狀態和安裝路徑。
-lk - 列出對 Windows Communication Foundation 進行指令碼映射
的位置的所有 IIS 中繼資料庫密鑰,以及該版本。將不會
顯示從父密鑰繼承 Windows Communication Foundation
指令碼映射的密鑰。
-vi - 確認目標組件的安裝並產生報告。組件可以處於下列狀態:
未知、未安裝、已進行預設安裝或已進行自訂安裝。
-y - 在卸載或重新安裝組件之前不要求確認。
-q - 安靜模式(減少輸出資訊)。
-v - 詳細模式。
-nologo - 取消著作權和標題訊息。
-? - 列印此協助文本。
=================
4)註冊WCF組件,執行:ServiceModelReg.exe -i 斷行符號
如果出現下面的資訊,說明註冊成功了:
=================
C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation>Service
ModelReg -i
Microsoft(R) Windows Communication Foundation 安裝公用程式
[Microsoft (R) Windows (R) Communication Foundation, 版本 3.0.4506.2152]
著作權 (c) Microsoft Corporation。著作權所有,並保留一切權利。
正在安裝: Machine.config 節組和處理常式
正在安裝: System.Web 產生提供者
正在安裝: System.Web 編譯器集
正在安裝: HTTP 處理常式
正在安裝: HTTP 模組
正在安裝: Web 主機指令碼映射
安裝完成後開啟IIS
2,WCF服務的構建
說明:一般情況下,我們編寫程式時,服務和程式是放在一個解決方案裡的,但是發布時,要將服務代碼上傳到伺服器,不能把那麼大的檔案都傳上去,所以我就重現構建了個WCF服務,不知這裡說的對不對
建立過程:
1)檔案-->建立-->項目-->Web-->WCF服務應用程式-->編輯名稱-->確定
2)結果如下:
刪除系統產生的兩個檔案IService1.cs與Service1.svc和Web.config檔案,將我們當初嵌入到項目中的服務檔案粘貼到這裡來,包含到項目中。
3,IIS綁定WCF服務
4,疑難雜症:
由於我的服務需要串連SQLServer資料庫,就出現下面的問題:
本問題的特徵是:資料庫是SQL Server Express、程式在VS中調試成功,但是在在IIS中產生類似如下的問題
------------------------------------------------
無法開啟登入所請求的資料庫 "dbName"。登入失敗。
使用者 ‘IIS APPPOOL\DefaultAppPool‘ 登入失敗。
解決方案
【1】IIS中:
1、先查看你的網站使用的是哪個應用程式集區
2、基本設定-->選擇.net framework v4.0
3、設定應用程式集區的選項
應用程式集區->對應的程式池上右鍵->進階設定->進程模組_標識->選擇NetworkService(與資料庫中設定統一)。
【2】資料庫:
開啟sql server 2005(2008) management studio
安全性->登入名稱->右擊建立登入名稱->常規->搜尋->添加SERVICE使用者->伺服器角色->勾上sysadmin
一般已存在,勾上sysadmin即可。
5,將WCF服務設定成指向IIS(對應程式)
然後通過在瀏覽其中輸入網址,檢驗服務是否配置成功。
6,最後就是在實際項目中加入服務參考了
右鍵加入服務參考,將上面5中的項目URL網址粘貼到其中,點擊前往,編輯命名空間,確定即可。
對於一些情況還需要進行進階設定,將集合類型調整下,從Array調整為List,要看具體情況
說明:步驟5,6這樣做的好處,可以分別進行調試,可能是由於訪問URL的一致吧,使兩者關聯,具體我也說不太清楚。
以上是給自己日後再次出現這些問題做的總結,也希望對看到的人兒有協助。
注:參考文章1,http://www.jb51.net/article/41898.htm;2,http://www.cnblogs.com/chsword/archive/2009/09/05/1561067.html;3,http://blog.csdn.net/findsafety/article/details/9045721
IIS發布WCF服務項目之本地