May 17, 2015

呼叫ASP.NET Web API出現HTTP 405錯誤

目前使用ASP.NET Web API開發web service已經是團隊的best practice。前幾天把寫好的service部署到測試環境(Windows 2012 Server + IIS 8),呼叫兩支需要使用到HTTP PUTDELETE的API,結果出現了405的錯誤訊息,但在本機(Windows 7 + IIS Express 8.5)測試時卻沒有類似問題


解決方式可以在<system.webServer>\<modules>下加入<remove name="WebDAVModule" />及<system.webServer>\<handlers>加入<remove name="WebDAV" />,如
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

或是把WebDAV Publishing功能移除



May 3, 2015

TeamCity - 使用HTTPS連線

TeamCity - 簡介與安裝一文中,我在安裝TC時將預設的port number設定為80。如果你有安全上的考量,也可改以HTTPS連線,不過TC目前的版本(9.0.4)仍無法透過管理介面來做設定,需要直接修改設定檔並重新啟動TC的Windows服務。

既然要使用HTTPS連線,首先必須準備好SSL憑證。在Windows平台上,TC可讀取的憑證格式為*.pfx。你可以透過IIS管理工具或是從作業系統中匯出*.pfx憑證,如IIS 8 and IIS 8.5: How to Import and Export SSL Certificates。匯出後將憑證複製一份到TC所在的伺服器,如C:\keys\domainname.pfx,接下來修改設定檔。

開啟C:\TeamCity\conf\server.xml,加入以下設定

<Connector port="443"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true"
           scheme="https"
           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           keystoreFile="C:\keys\domainname.pfx"
           keystorePass="P@ssw0rd"
           keystoreType="PKCS12"
           maxThreads="150"
           />

keystoreFile為憑證所在實體路徑,而keystorePass為憑證密碼。設定完成後重新啟動TeamCity Server服務,接下來即可以HTTPS連線瀏覽TC。


雖然開啟了HTTPS連線,HTTP連線仍然支援,如果要完全關閉HTTP連線,可在硬體或軟體防火牆關閉port number 80。

最後,在Adninistration> Global Settings中將Server URL更新成HTTPS的連線位址。