2008年4月23日 星期三

將WCF服務裝載在Windows 2008的IIS 7.0之中

今天寫了一個WCF服務,企圖裝載在Windows 2008的IIS7上執行
遇到了一些問題, 在瀏覽器輸入 http://localhost/IISHost/Service.svc 時,顯示無法識別Service.svc
歸納解決方案如下:
  • IIS 7在安裝時, 要確定有安裝了「IIS 6管理相容性」,才能利用Visual Studio 2008在IIS 7上建立一個專案
  • Visual Studio 2008要以系統管理員身份啟動(和Vista有異曲同工之妙),才能在Visual Studio 2008建立一個IIS的應用程式
  • 執行C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication foundation目錄下的 ServiceModelReg.exe -i 安裝WCF
完成這些動之後,就可以順利在IIS 7上設計WCF服務了!!

16 則留言:

匿名 提到...

米米貓大大,想請問一下,我在WCF上碰到一個
很頭痛的問題-->
將整個WEB專案(含WCF服務) 放在本機的IIS上(假設虛擬目錄=aaa,本機的IP為192.1638.100.1)後,
只能以http://localhost/aaa 來瀏覽網頁,卻不能以http://192.168.100.1/aaa
來瀏覽,,快想破頭了,還是找不出答案,
請問大大我的問題可能出在那呢?謝謝

米米貓學開發 提到...

或許您可以檢視一下您IIS的設定,是否有將IIS->Default Web Site->Web Site頁中的IP Address設定為特定IP位置,有的話取消看看!

匿名 提到...

報告:
剛去檢查了,IIS預設的網站,
其IP位置是"沒有指定的"~
煩米米貓大大再幫想想,謝謝~

米米貓學開發 提到...

建議,先確定一下是IIS的問題,還是程式的問題
(1)如果使用VS直接在IIS上建個WCF服務可不可work?如果可以,應該就是設定的問題,
(2)看看IIS有沒有設Redirect之類的,取消Redirect
(3)是ASP.NET網頁有問題,還是叫用到WCF服務時才有問題?
(4)IIS中ASP.NET虛擬目錄(或應用程式)是否設定使用.NET 2.0 Framework 運作
(5)檢查一下程式叫用到服務時,使用
http://localhost還是寫死http://某ip
(6)IIS有沒有執行類似IIS LOCKDOWN這類工具程式做 IP filter之類的?

目前大概想到這樣...
如果是開發環境,我可能會選擇移除IIS重裝!呵!Good Luck!

米米貓學開發 提到...

順便看一下是否是防火牆的問題
像XP之類的防火牆都會預設擋掉80

亞當斯(Adams) 提到...

要不要試試看用 http://127.0.0.1/aaa來試試?那個http://192.168.100.1可能還要考量getway和dns設定等等的,說不是你用IP分享器的話,就檔掉一些PORT了

米米貓學開發 提到...

又想到一個,有IIS的網站的Directory Security->IP address access restrictions是不是有設定特定IP才能連?

匿名 提到...

(1)如果使用VS直接在IIS上建個WCF服務可不可work?如果可以,應該就是設定的問題,
請問大大↑部份要如何製作?
(2)看看IIS有沒有設Redirect之類的,取消Redirect-->沒有設定redirect
(3)是ASP.NET網頁有問題,還是叫用到WCF服務時才有問題?
ASP.NET的網頁都正常顯示出得來OK,
唯有當一叫到WCF服務,網頁就就出錯了
其訊息是一長串的但關鍵字是"CrossDomainError",
但我跨域存取的POLICY已經有給了.
(4)IIS中ASP.NET虛擬目錄(或應用程式)是否設定使用.NET 2.0 Framework 運作
-->是的
(5)檢查一下程式叫用到服務時,使用
http://localhost還是寫死http://某ip
程式裏服務所在位置是 http://localhost:
portnumber/servicename.svc
(6)IIS有沒有執行類似IIS LOCKDOWN這類工具程式做 IP filter之類的?-->無

匿名 提到...

先感謝亞當斯大大的回覆:
要不要試試看用 http://127.0.0.1/aaa來試試?那個http://192.168.100.1可能還要考量getway和dns設定等等的,說不是你用IP分享器的話,就檔掉一些PORT了

-->有用http://127.0.0.1/aaa來試,一樣是,ASPX網頁出得來,但一做了WCF服務的呼叫,網頁就出錯了~因為我是在公司做的專案,
防火牆的設定被網管控制住,我等等去問看看.
傷透腦筋啊~

匿名 提到...

順便看一下是否是防火牆的問題
像XP之類的防火牆都會預設擋掉80
-->嗯,我準備來請網管看看..
先謝謝米米貓大大熱心回應

米米貓學開發 提到...

疑~你說服務:
http://localhost:
portnumber/servicename.svc
有用port Number?
如果WCF Host在IIS上,應該就是走port 80ㄚ...所以不用給portNumber說~
你是走HTTP嗎?還是有設別的Binding?
如果是用HTTP應該這樣寫吧~
http://localhost/servicename.svc

米米貓學開發 提到...

"使用VS直接在IIS上建個WCF服務"

操作步驟:

在Visual Studio 2008或2005新增一個WCF 服務專案,選擇HTTP方式,就可以直接建立專案在IIS了,跟建ASP.NET網站是一樣的做法!

匿名 提到...

嗯,在專案下,有個WCF服務的
ServiceReferences.ClientConfig裏,我把內容PO上如下:
[configuration]
[system.serviceModel]
[bindings]
[basicHttpBinding]
[binding name="BasicHttpBinding_IService1" maxBufferSize="65536"
maxReceivedMessageSize="65536"]
[security mode="None" /]
[/binding]
[/basicHttpBinding]
[/bindings]
[client]
[endpoint address="http://localhost:1314/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
name="BasicHttpBinding_IService1" /]
[/client]
[/system.serviceModel]
[/configuration]
(我把tag 的角括弧換成方括弧,因為
回文有限制...)
在這config檔裏,他有設定PORTNUMBER,
我發現那是執行VS2008開發工具時所自動
給你的本機虛擬伺服器。
雖然程式裏頭有指定PORT,但放到IIS執行起
來,只要http://localhost/aaa,就好了,不用再給PORT number.
還有,忘了說,我的環境是XP SP2+IIS 5.1
剛找到一段MSDN的文字,,等等PO上來請大大
過目一下,我看不太懂其中意思啊~
謝謝!

匿名 提到...

對了大大,請問,我查MSDN,找到下面這段文字:
如何部署IIS裝載的WCF服務
開發與部署 IIS 裝載的 WCF 服務包含下
列工作:
1.確定 IIS、WCF 和 WCF HTTP 啟動元件
都已正確安裝及註冊。

WCF、WCF HTTP 啟動元件是什麼?
我好像沒有手動額外再安裝這個元件哩?

米米貓學開發 提到...

(1)你要不要先把Port Number拿掉試看看?
(2)註冊與啟動應該就是指這個,使用ServiceModelReg.exe註冊:
http://vmiv.blogspot.com/2008/04/wcfwindows-2008iis-70.html
(3)你要試(2)之前,要不要先試著用VS建立一個"WCF服務"類型的網站試看看,如果可以就不是註冊與啟動的問題!

米米貓學開發 提到...

剛小測了一下
我覺得應該是port Number的問題
要叫用到IIS上的WCF服務,應該Client要指明WCF服務的端點與位址,所以Client中的設定address的位址應該是你WCF服務在IIS中開放的位址才對!

總網頁瀏覽量