顯示具有 IIS 7 標籤的文章。 顯示所有文章
顯示具有 IIS 7 標籤的文章。 顯示所有文章

2012年5月30日 星期三

使用非管理員權限來部署 ASP.NET 應用程式

系統交付給客戶後,系統是有保固時間的。當程式有 bug,就需要更新程式。如果程式更新都要請客戶自己部署,那之後就要讓客戶使用起來方便。
而要請使用管理員權限來部署 ASP.NET 應用程式,就很可能被質疑,如果客戶程度夠的話。

因此需要一個可以使用非管理員權限來部署 ASP.NET 應用程式的方式。

目前使用 IIS 7.

建立更新帳號

只需要一般帳號即可。以下以 smartDeployer 為例

image

安裝/設定 IIS

如果沒有安裝 IIS,就照著下圖做。如果已經安裝了,就要看看哪些功能未被勾選。

image

image

 

image

image

Web Management Server 是一定要裝的。上圖少勾選了。Windows Authentication 不用裝(上圖有誤) 。

image

安裝 .NET Framework 4.0

記得安裝  .net framework 4.0 及  sp1。如果需要的話

安裝 Web Deploy tool V2.1

我們靠的就是 Web Deploy Tool,目前的版本是 2.1。記得在要部署的伺服器上,要完整安裝。

image

設定 Web Management Service

clip_image002

Web Management Server 必須靠 Basic 驗證。故需要啟用。

clip_image003

clip_image005

檢查 Enable remote connections (1)是否已經勾選(應已勾選)。若沒有勾選,請先按右方的「Stop」(2)鍵後,勾選「Enable remote connections」 ,再 Start(3)鍵。

clip_image007

授權

我們要授權 smartDeployer 可以在 Default Web Site 更新

clip_image009

clip_image010

最後按 Setup

clip_image011

防火牆

記得打開防火牆,port  8172

以上就完成了網頁伺服器的設定

部署

使用 Visual Studio 2010 打包後的 指令不能用。經明察暗訪後,需修改指令如下

"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\\msdeploy.exe" -source:package='Package.zip' -dest:auto,computerName='https://serverNameOrIp:8172/MSDeploy.axd?site=Default%20Web%20Site',userName='domainUser',password='password',authtype='Basic',includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"Parameters.xml"  -whatif  -allowUntrusted:true

參考

Configuring a Web Server for Web Deploy Publishing (Web Deploy Handler)

2011年11月21日 星期一

Windows 7 的 IIS Manager 無法連線到其他伺服器

在 Windows 7 上打開 IIS Manager,無法連線到其他伺服器做管理工作耶!原因無他,就是為了簡化。

在 Windows 7 上的 IIS Manager,當初設計時只想要管理本機而已,故沒有可以連線到其他伺服器的工具。(但工具列卻又有…)

解法:

    Internet Information Services (IIS) 7 Manager

2011年7月5日 星期二

Web deployment task failed. Unrecognized attribute 'serviceAutoStartMode'

經由上次介紹的 設定 IIS 為自動啟動 (Auto-Start)後,原先在 TFS 的 Web 自動部署 反而失敗了。訊息如下:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3588): Web deployment task failed.((2011/7/5 上午 08:16:45) An error occurred when the request was processed on the remote computer.)  (2011/7/5 上午 08:16:45) An error occurred when the request was processed on the remote computer. Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config Line number: 176 Error: Unrecognized attribute 'serviceAutoStartMode'

看來,目前 TFS 的 Publishing 尚不知道  AppFabric 的serviceAutoStartMode 屬性。只好在測試機上不使用 IIS Auto Start 的功能。

2011年7月4日 星期一

設定 IIS 為自動啟動 (Auto-Start)

第一次總是比較慢

以前在dotnet 1.0 時介紹 ASP.NET 的工作原理時,總是滿懷興奮向客戶提到compilation 的好處,就是程式執行後,會留下編譯(compilation) 的結果,下次相同程式執行時,不必再編譯了. 但此處有個缺點,第一個 Request,總是最倒楣的,不但要等 compilation,而且要等 IIS 建立執行序。

在 dotnet 2.0 後,有了 precompilation的機制。作法是部署程式,以手動執行 aspnet_compiler 來扮演那第一個倒楣的Reqeust。

至於等 IIS 建立執行序這回事呢,還是無解呢。

Auto-Start

在 IIS 7.5 後(Windows Server 2008 R2 or Windows 7),此問題終於有解了。作法是修改 C:\Windows\System32\inetsrv\config\applicationHost.config,並且設定兩個地方。

1  修改應用程式集區 (Application Pool) 為自動啟動:搜尋 <applicationPools,並將對應的 application pool 加上 startMode=”AlwaysRunning”

<applicationPools>
    <add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0" startMode="AlwaysRunning">
        <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" />
    </add>
  
2  修改應用程式為自動啟動:搜尋 <sites,並將對應的應用程式加上 serviceAutoStartEnabled="true"的屬性值

 <sites>
    <site name="Default Web Site" id="1" serverAutoStart="true">
        <application path="/">
            <virtualDirectory path="/" physicalPath="c:\inetpub\wwwroot" />
        </application>
        <application path="/MyApp" applicationPool="ASP.NET v4.0" serviceAutoStartEnabled="true" serviceAutoStartProvider="Service" serviceAutoStartMode="All">
            <virtualDirectory path="/" physicalPath="E:\Projects\Smart\Dev\Rsi.Smart2G\Rsi.Smart2G.WebServices" />
        </application>

Windows Server AppFabric

使用NotePad 修改 config總是怕怕的,尤其是 IIS 此等重要的設定,怎麼可以用如此簡易的工具來設定呢?客戶的資訊人員萬一修改錯誤,又得呼叫我們苦命的Vender 工程師,誰會給我們加班費呢?難道微軟沒有聽到我們的心聲嗎?

有的,這個 UI 設定工具,就是之前介紹的 Windows Server AppFabric。安裝後,只要簡單地在應用程式上按右鍵/Manage WCF and WF Services/Configure…,

SNAGHTML7d76c6

接下來在左方功能表中選到 Auto Start,再選擇 Enable(all services will auto start)的選項。

image

按 Apply 鍵後,就大功告成了.

2011年6月8日 星期三

WCF Data Service 在 PUT 時發生 405 Method Not Allowed

原因

最近在使用 WCF Data Services 時,WCF Data Services Client library 使用 DELETE HttpMethod 時,發生了 HTTP Error 405.0 - Method Not Allowed 的錯誤。

SNAGHTML1d31d0e

HTTP Error 405.0 - Method Not Allowed

The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.

解決

經過不少的測試,也試過移除IIS 7 的 WebDAV module,都不成功。最簡單的方法,是在 Web.Config 中增加下面的設定。感謝 IIS 7。

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
  <remove name="WebDAVModule" />
</modules>
<handlers>
  <remove name="WebDAV" />
</handlers>
</system.webServer>

 

參考

打開 IIS 7 的壓縮功能

緣由

近來幾乎所有的 Middle Tier 的功能,微軟都是使用 IIS 來作 Host,最有名的就是WCF。如果要建置跨平台的解決方案,使用 xml + Http 幾乎是不二人選,binary 的 protocal 就把它忘了吧。

然而, xml + http 為人最為垢病的地方,就是它實在痴肥。為了讓它減肥,我不得已來 study 如何在 IIS 7 上壓縮網頁的輸出。

如下圖,我呼叫叫了一個 WebService,回傳的是 xml,但大小竟然是 1.5 MB!!這叫我如何能接受?

image

過程

Step1: 安裝Dynamic Content Compression

說實話,我已在 IIS 6 上實作過了。IIS 6 的過程實在不人道,我也不想 POST 到部落格上。而 IIS 7 就簡單許多。

首先,要了解的是 IIS 7  預設就打開了靜態內容的壓縮。不像 IIS 6預設都不壓縮。這大概與 IIS 壓縮的成熟度有關吧。

打開 IIS 7, 點到 Compression 的功能,右方出現一排字「The dynamic content compression module is not installed」,意思就是沒有安裝 dynamic content compression 這一個 module。

imageimage

使用 Programs and Features,執行左方 Menu  的 Turn Windows features on or off,並勾選「Dynamic Content Compression」,按OK建進行安裝。

imageSNAGHTML70f490

安裝完成後,再到 IIS 上執行Compress 的設定。check 一下,果然設定成功了。

image

Step 2: 設定 全機壓縮

只有安裝 dynamic content compression 模組是不夠的。IIS 此時尚不知道要對什麼動態內容作壓縮,接下來設定的就是:「告訴 IIS 什麼樣的內容要作動態壓縮」

在 IIS 上,點選 machine 名稱,執行「Configuration Editor」。

SNAGHTML82361b

選 Section : system.webServer/httpCompression,並調整「dynamicTypes」

image

按右方 Actions Pane 的 Add 連結,並輸入 application/atom+xml

image

記得完成後,要按右上的 Apply 鍵完成設定。

最後,還要重新起動 IIS

SNAGHTML8e7694

結果

再使用Fiddler 測試一下相同的網頁。Oh, My God, 1.5MB的內容壓縮過後只剩 149 KB,壓縮成原來的 10% ,省下的頻寬實在可觀。

image

2011年6月2日 星期四

TFS 的 Web 自動部署

繼上次的 TFS 建置:Coded UI 自動測試 問題後,好久好久我都沒再碰 TFS 的 Build 設定了。

這次,目的在建立 Web 的自動部署。

環境

這次的環境較為複雜。有開發機,TFS Server,Build Server,Test WebServer.

希望可以達成的需求:在開發機上要求一個 Build後,TFS Server 向 Build Server 要求啟動一個 Build。Build Server 完成 Compile 後,將 Web Application 自動部署到 Test WebServer。

過程還有些漫長,最大的原因還是「太久遠的記憶」是不可靠的。下面是我試出來的結果。

Build Definition

在 MSBuild Arguments 我設定如下

/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:MSDeployPublishMethod=RemoteAgent
/p:CreatePackageOnPublish=True
/p:DeployIisAppPath="Default Web Site/YourApp"
/p:MsDeployServiceUrl=http://172.199.199.199/MsDeployAgentService
/p:username=administrator
/p:password=adminpassword

image

 

Build Server

Build Server 上,必須安裝了 Visual Studio 2010。我試的結果,不裝,就不會自動部署。我不知道到底我錯過了什麼環結,雖然設定了上述的 MSBuild Arguments,但就是不跑 Deploy。

安裝時,我選了 c# 與Visual Web Developer。理論上只需安裝 Visual Web Developer即可,但我不想再浪費時間試了。

image

另外,在 Visual Studio 2010 Web Application 的專案屬性上,也有一些玄機。如果有勾選「Include IIS settings as configured in IIS」或「Include application pool settings used by this Web project」的話,在 Build Server 就要安裝 IIS 並且有相同的設定。因為當 Build Server 要打包 package 時,需要讀IIS的設定。讀不到設定就會出現下面的錯誤訊息。

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (1657): "MapUriToIisWebServer" 工作發生未預期的失敗。 System.Runtime.InteropServices.COMException (0x80005000): 未知的錯誤 (0x80005000)  

image

此時的我,顧不得完美了,先不要勾選這兩個選項了。

Test Web Server

1 在待部署的 Web Server 上,必須安裝 Web Deployment Tool。安裝時,必須注意要選「完整」安裝。

2 安裝完畢後,需要在服務中啟動 Web Development Agent Service

image

3  Build 執行後出現下面的錯誤

Web deployment task failed.((2011/6/2 下午 05:14:42) An error occurred when the request was processed on the remote computer.)  (2011/6/2 下午 05:14:42) An error occurred when the request was processed on the remote computer. The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'.

由於我沒有選擇要打包 IIS 的設定,部署後的應用程式是下 Default Web Site 下。Default Web Site 預設是.net framework v2.0, MSDeploy 在建立 application 時會預設同上一層的 application pool。

我的解法是直接將上一層的 Default Web Site 改用 v4.0 的 application pool。

結論

上述設定,一定還有調整優化的空間。之後有空再寫 blog好了。

雖然很麻煩,但想到之後不必再手動部署測試環境時,心裡也就舒坦了許多。

參考

危險的 HTTP method 測試

緣故

今天早上客戶寄來一封資安檢測結果,說我們維護的Web系統有漏洞。

弱點大意是:Web Server 提供了 PUT, TRACE, DELETE, CONNECT 的 Http Method. 應該關閉。

並且把這項缺失列為中等風險,寫的很厲害的樣子。「PUT method 允許用戶端上傳檔案至伺服器, DELETE method 允許用戶端將伺服器的檔案刪除. 將允許遠端攻擊者可任意上傳檔案至伺服器而置換網頁, 若攻擊者上傳惡意程式到具有執行權限的目錄, 將可達到更大的破壞.」

過程

記得我們沒有開 WebDAV 啊!為什麼寫的這麼離譜?使用 Fiddler 查一下吧!

使用 Fiddler 的 Request Builder 查開發機 IIS

image

再選到 Inspectors,看查詢的 Request 及 Response (結果)
OPTIONS 會列出該 Web Server 可使用的 Http Method.

image

結果列出來,只有一項 TRACE 是有爭議的。根據 RFC 2616 指出,這是用來 Debug 用的 Method,可能揭露出不必要的資訊。因此會被列為風險。在 Apache 上更可能被偷取 cookie

IIS

為什麼在IIS 上 TRACE 預設是可以使用的呢?再使用 Fiddler,這次使用 TRACE 查一下吧。

image

image

這次的結果是 HTTP/1.1 501 Not Implemented (未實作)。HttpStatus 500 以上代表伺服器錯誤。

雖然有開放 TRACE 這個 Method,但一律回未實作。這妙吧。
因此,沒有漏洞。

再使用 DELETE 查一下。結果是 405 Not allowed(不允許)。這證明 IIS 上的WebDAV 果然沒有開啟。

image

結論

一看到資安檢測結果時,雖然只有這一項目,還是心裡不舒服。

看來該資安廠商是使用工具掃出來的結果。雖然只有一個 TRACE 看來符合,但把整個 PUT, DELETE, TRACE, CONNECT 全部列上去,看來比較有「價值」。

另外, IIS 為什麼要列為可用的Method,然後再回應 501 未實作呢?這裡就不深究原因了。

2011年1月16日 星期日

使用 IIS Express

上一篇介紹 IIS Express 後,這一次談如何使用。

安裝

Internet Information Services (IIS) 7.5 Express 下載後執行。安裝過程完全是「下一步」「是」「完成」的過程,其間沒有任何輸入選項。或者到 Web Platform Installer 來安裝 這個連結

自行啟動 IIS Express

預設的狀況下,是要自行修改 IIS Express 設定及啟動 IIS Express 的。以下就介紹如何在 Visual Studio 2010 上使用 IIS Express。

  • 首先,建立一個 Web Application,並且命名為 WebApplication1。接著,修改 WebApplication1 的 Property,在 “Use Custom Web Server” 中設定為 http://localhost:12345/

image

  • 再來,以notepad 打開 %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config,修改configuration\system.applicationHost\sites 如下
<sites>
    <site name="WebSite1" id="1" > <!-- serverAutoStart="true" -->
        <application path="/">
            <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation=":8080:localhost" />
        </bindings>
    </site>
    <site name="WebApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\bc\Documents\visual studio 2010\Projects\WebApplication1\WebApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation=":12345:localhost" />
        </bindings>
    </site>
    ...

我主要增加了一個新的 site,name 為 WebApplication1。id=2,請不要重複即可。在 physicalPath 中,請填入上一步 Visual Studio 所建立的 web Application 的應用程式目錄。bindngInformation 則彷校範例 WebSite1的樣子,修改為 :12345:localhost,意思是使用  localhost 的12345 port

而我將 第一個 Site name=”WebSite1” 的 serverAutoStart 移除掉了。因為我不想一啟動 IISExpress 就會啟動這個WebSite1範例。

  • 最後,按Win+R鍵或在 cmd 中執行下面指令以啟動 IISExpress
"C:\Program Files\IIS Express\IISExpress.exe" site:WebApplication1

執行結果如下圖

image

在Windows 右下方也會出現圖示。在圖示上按右鍵可以查詢執行。

image

當然,我們就可以執行 http://localhost:12345/

image

 

整合Visual Studio 2010 開發環境

上述的設定過程是不是很麻煩呢?是的,可是沒辦法。我們必須等到 Visual Studio 2010 SP1之後,才能享到直接在開發環境中整合設定的好處。使用 Visual Studio 2010 SP1 Beta 時,會多出一個「use IIS Express」的選項,如下畫面。

image

在未使用 IIS Express 的 Web 專案,也會多出一個 Use IIS Express 在快顯選單上。

image

結論

我還是等到 Visual Studio 2010 SP1 好了。這樣比較簡單。但對於其他如  VS 2005, VS2008 等使用者,只好說聲 Sorry,乖乖地自行啟動 IIS Express 吧!

2011年1月15日 星期六

介紹 IIS Express

開發 ASP.NET 的應用程式是我的主要工作。當然我會選擇最適合的開發環境。客戶多屬於企業用戶,我的開發的選擇,多半是 ASP.NET Web Application + SQL Server + IIS。

在內部 Demo 開發技術時,則會偶而使用 Web Development Server 來示範。然而在許多專案上,仍然看到選用 Web Development Server 來開發企業用的程式,雖然知道不妥,也常常宣導,但在 Visual Studio 預設使用 Web Development Server 的狀況,實在無法防止誤用的情形。

以下就探討一下 IIS 7,Web Development Server,及2010/01/13 推出的 IIS Express

使用 IIS

所有的 ASP.NET 應用程式,無論是 WebSite,WebForm,還是最新的 MVC,最終需要部署到 IIS 上。我認為開發環境最好直接使用 IIS,避免開發環境與正式環境差異太大,開發人員與維運人員的認知才會趨於一致。

優點

  • 與正式環境趨於一致。尤其在權限設定差異最為常見。

缺點

  • 設定繁複,且不同版本的 IIS會有不同的設定方式。例如 IIS5, 5.1, 6, 7, 7.5。隨著IIS不同版本,設定的位置,介面,帳號都有極大的不同。
  • 在 Vista 或 Windows 7 上,由於UAC 的限制,需要以管理員權限執行 Visual Studio 才能開發。
  • Windows Home 版本無法安裝 IIS。尤其學生或 SOHO 人員常常經費不多,無法學習或開發簡易的程式。
  • 在 Windows XP 上,只能使用 IIS 5.1。此時如果想要在 XP 上開發 IIS 7 的 ASP.NET 程式就很難了。

想要讓開發人員對不同 IIS 版本都有一定程度的了解,幾乎是不可能的事了。開發人員只能儘快地開發出需求對應的功能,對於如何部署一事,大部份都不太在意。

ASP.NET Web Development Server 的缺點

為了克服 Visual Studio 使用 IIS 的困難,微軟開發了 ASP.NET Web Development Server 這個工具。

優點

  • 簡化開發環境。開發人員不必安裝 IIS。這一點,也克服了 Windows Home 版本無法安裝 IIS 的問題。

缺點

  • 一個應用程式一個 Port。無法使用虛擬目錄。也不適用 Single Sign On 的開發。
  • 不支援 HTTPS
  • 無法使用自訂的驗證方式 ,IPrincipalIIdentity
  • 只能給開發機使用
  • 與 IIS 相比,啟動時間長
  • 直接使用與開發人員所使用的帳號作為執行 security context,而開發人員所登入的帳號常常又是管理員,造成與部署 到IIS的真實狀況 (IUser, network Service, w3wp 等)差異甚大。
  • 無法模擬asp。如果您的程式有 asp 的網頁,就不適用 Web Development Server。
  • 與 IIS 7 上的 http handler, http module 執行方式不同。見 http://charlesbc.blogspot.com/2009/11/aspnet-file-does-not-exist.html 
  • etc.

由於 Web Development Sever 的設計先天上就與真實 IIS 的執行大異其趣,許多怪異的行為層出不窮。我非常不建議使用 Web Development Server 來執行軟體開發專案。

IIS Express

由於 UAC, IIS 7 等後來的技術演變,原先設計的 Web Development Server 早已不符合需求了。微軟也體認到了這一點,於是在2010 年中開始著手開發下一個繼任的版本,也就是 IIS Express 7.5。

優點

  1. 使用 IIS 7 同一個 Kernel。因此行為與 IIS 大致相同。例如可以模定 https,http modules 與 http handlers 也與 IIS 7 的執行結果一致。
  2. 使用與開發人員相同的 security context,因此不受 UAC 的限制。

IIS Express 同時包含了 IIS 與 Web Development Server 的優點。這也是我推薦的原因。

缺點

  1. 還是使用了開發人員的 security context。開發人員容易誤以為程式的執行結果都是對的,卻不知道其實是有許多前題(即安全設定)。

由於 IIS Express 才 release 沒多久,還無法知道有哪些實際的缺點。這個缺點的清單或許會愈列愈多吧。

參考

2010年12月14日 星期二

全球千大企業的應用伺服器使用的網頁技術

舊聞了,但今天才知道的訊息。根據Port80 Surveys the Top 1000 Corporations' Application Servers and Scripting Platforms (July 2007),ASP.NET 在2007 年時被採用的比例為 51.5%,遠超過第二名的Java platform 12.7%

image

而在這篇中Port80's 2010 - Top 1000 Corporation Web Servers,54.5%的伺服器是使用 IIS,但其中絕大部份仍使用 IIS 6.0。

image

2010年9月21日 星期二

This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed

緣由

開發 Oracle 專案時,發生了下面的錯誤訊息

Attempt to load Oracle client libraries threw BadImageFormatException.  This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed. Inner exception message: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

環境

以下是我的開發環境

解決方法

    由於 ODAC 目前只有32 bits的程式,而VS2010方案(solution)指定Build Target 是 AnyCPU,在 IIS 7 上就會執行 64 bits。在 64 bits 的 Process 上載入 32 bits 的 Oracle client library 就會發生這樣的錯誤訊息。

   解決方式也很簡單,就是在 IIS 7 上指定 Application Pool 可以跑 32 bits 的程式。

  1. 找到執行該程式的 Application Pool. 我的例子是使用預設的 ASP.NET v4.0。
  2. 在右方的 Action Panel 上,點擊「Advanced Settings」
  3. 將 Enable 32-Bit Applications 設為 True

   image

結論

    此方法只適用在開發機器上,目的是為了使用 Oracle Developer Tools For Visual Studio。在正式機上,就應該安裝 64 bits 的 Oracle Client library.

2009年7月16日 星期四

IIS LogParser

在調整校能的過程中,除了 VSTS 的 LoadTest 之外,也常常需要分析正式伺服器上的 IIS  Log.
但是,此log為純文字檔,要如何分析呢?我們當然希望匯到資料庫,再以 sql 語法找出想要的資訊。

將IIS Log匯出到資料表的過程,微軟早就出了這樣的工具,LogParser

指令,像下面即可。

"C:\Program Files\Log Parser 2.2\LogParser.exe " "SELECT TO_LOCALTIME(TO_TIMESTAMP([date], [time])) as [createDate], [s-sitename], [s-ip], [cs-method], [cs-uri-stem], [cs-uri-query], [s-port], [cs-username], [c-ip], [cs(User-Agent)], [sc-status], [sc-substatus], [sc-win32-status], [sc-bytes], [cs-bytes], [time-taken] INTO IISLog FROM C:\IISLog\ex090714.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png';'bmp';'ico';'axd')" -o:SQL -server:serverName -database:IISLog -driver:"SQL Server" -username:userId -password:pwd -createTable:ON -i:W3C

棒吧!連選資料的方式,都像是 sql  語法。

2009年6月7日 星期日

iis search engine optimization toolkit

還記得兩三年前,主管問我如何讓搜尋引擎找到我們公司的首頁,並且讓它排的前面一點?

當時記得有 SEO (Search Engine Optimization) 這件事,也看過了 Lynda 相關的課程。 但說實話,在asp.net 上還真的麻煩。

究竟要如何 SEO比較好呢?微軟出了這一個 toolkit,希望在IIS 7 上做 SEO 能更簡便一些。

詳請見 http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx

2009年5月12日 星期二

WCF 設定:此服務的安全性設定需要 'Anonymous' 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證。

老問題了。在IIS 7 又發生了如下的錯誤。

'/' 應用程式中發生伺服器錯誤。

此服務的安全性設定需要 'Anonymous' 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證。

描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外詳細資訊: System.NotSupportedException: 此服務的安全性設定需要 'Anonymous' 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證。

原因

*.svc檔需要 Anonymous 來讀取,以提供 wsdl。而目錄並未提供 Anonymous 的權限。

步驟

  1. 檢查目錄是否有 Network Service 的 「讀取及執行」、「列出資料夾內容」、「讀取」的權限
  2. 檢查目錄是否有 IIS_IUsrs 的 「讀取及執行」、「列出資料夾內容」、「讀取」的權限
  3. 在 IIS Manager 上檢查目錄是否有啟用「匿名驗證」

image image

更詳的步驟,參考這裡

2011/02/09: 有時,是IIS 未註冊成功的目題,請試著執行

執行"%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r –y

2011/06/09: 在 dotnet V4.0,要執行"%windir%\Microsoft.NET\Framework64\v4.0.30319\ServiceModelReg.exe" –r

2012/06/06: 在 Windows 8 的 IIS 8 上,ServiceModelReg 已被取消。所得的結果只剩下

Microsoft (R) WCF/WF registration tool version 4.5.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Administration utility that manages the installation and uninstallation of
WCF and WF components on a single machine.

[Error]This tool is not supported on this version of Windows. Administrators should instead install/uninstall Windows Communication Foundation features using the 'Turn Windows Features On/Off' dialog, or the dism command line tool.

意思是:只能使用Turn Windows Features on or of 的方式來安裝。

2009年1月23日 星期五

在 IIS 7 上,讓 FormsAuthentication 也可以套用到 jpg 檔案

在IIS 6 的時代,處理 asp.net 的要求需要兩個階段。

舉例來說,一個 .aspx 的 client request 送到 IIS 6 上後,先由 IIS 的驗證後,再交給 asp.net 的 isapi 來處理。(兩階段)

在 IIS 7 的整合模式後,就可以直接交給 asp.net 了。 因此,我們可以將 Anonymouse 關掉,只剩下 FormsAuthentication. 如下圖。

image

這樣還是不夠的。原因是,預設 FormsAuthetication 只會管 managed resources。因此,必須設定讓它可以管 non-managed resources。

 

打開 C:\Windows\System32\inetsrv\config\applicationHost.config,可以見到下面這一段的設定


    
      
        
      
    
  

注意 precondition="managedHandler" 的屬性設定,代表著只管理 managed resource了。

所以,我們只需要在應用程式目錄中,增加 web.config中的 http modules 設定,將該段重新設定。

 
    
      
      
    
  

我們將 modules 區段中,FormsAuthentication 的設定移除後再重新加入,並將precondition="managedHandler" 的屬性拿掉,意味著不必再分是否是 managed resource了。

經過了這兩個步驟,這輕易達成我們的目標

2008年11月24日 星期一

Suggested Performance Counters to Watch (IIS 6.0)

客戶有交代一個需求

希望能撰寫類似 watch dog 功能的監看程式

安裝在每一台Web主機上

當發現IIS運作異常時,

自動Reset或Restart IIS

我目前是以網頁吐出為判斷依據

但希望能加強預警機制

藉進一步觀查某些指標 (ex: cpu, memory...etc)

來判斷IIS是否快當了...

問題是,要判斷那些指標;

或者是可以觀察那些行為

來達定預警的目的。

 

要看什麼東西呢?原來微軟早已有了答案。see Suggested Performance Counters to Watch (IIS 6.0)

2008年7月22日 星期二

IIS 7 的網站管理 with managed code

以往,要在 IIS 6 新增網站,增加 application 或 application pool ,都必須靠人工由 inetmgr 操作,或寫 script 操作 activeX 元件。
不是非常方便。

學了 .net 後,這些工作並沒有得到改善。原因是 IIS 6 仍然是 unmanaged code。

終於, IIS 7 算是改寫了。因此,可以用下面的程式來新增一個 "MyDemoSite" 網站,port 是 8080。該網站的根目錄是 c:\demoSite。
並建立一個 applicatioin pool 為 "demoPool",且是 intergrated。並將該網站的 application pool 設為 "demoPool"。
(ps: 上一段的文字描述,反而不如程式碼來的清楚)

首先,必須 add reference。必須瀏覽到 C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

然後再寫下面這一段

      ServerManager serverManager = new ServerManager();
      serverManager.Sites.Add("MyDemoSite", @"c:\demoSite", 8080);
      ApplicationPool pool = serverManager.ApplicationPools.Add("demoPool");
      pool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
      serverManager.Sites["MyDemoSite"].Applications["/"].ApplicationPoolName = "demoPool";

      serverManager.CommitChanges();
這一段程式,必須由具有權限的人來執行。否則會發生例外。

2008年2月14日 星期四

IIS 7.0 上的 Windows Authentication

開發時,一直無法使用 Windows Authentication 再加上 IIS 7.0 的操作介面還不熟。找了許久 原來,預設是不啟用的。 到 Programs and Features\Turn Windows Feathures on and off 到 IIS\Word Wild Web Services\Sercurity 將Windows Authentication勾選 再按 OK即可

2007年5月8日 星期二

IIS 7 無法移除 native type modules

看完 IIS 7 的 demo,演示了可完完全客製模組。 很興奮,就拿了 longhorn beta3 來試。結果,只有 managed type 的 modules 可以移除,而 native type 的不行。 google 了很久,也找不出所以然。最後,找到了 c:\windows\system32\inetsrv\config\applicationHost.config, 修改了下方的 的部份,找到了 ,並將所有的 lockItem="true" 移除。 這樣,才能完全自訂module。 話又說回來,這些 native module ,通常是常用,且增加安全性的模組,預設為locked,這樣的設計好像也沒錯。

Share with Facebook