37

我想要得到msdeploy安裝和設置。我已經在網絡服務器上安裝了遠程服務,但我所有的測試都給了我一個401 unauthorised error。服務器是Windows 2008 R2。msdeploy(Web部署)失敗,401驗證問題

我測試一個非常簡單的msdeploy命令:

msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword 

和錯誤:

Error: Object of type 'contentPath' and path 'c:\inetpub\wwwroot\MonApp' cannot be created. 
Error: Remote agent (URL http://<IP HERE>/MSDEPLOYAGENTSERVICE) could not be contacted. Make sure the remote agent service is installed and started on the target computer. 
Error: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected. 
Error: The remote server returned an error: (401) Unauthorized. 
Error count: 1. 

我創建了一個用戶名爲msdeploy,我把它添加到本地管理員組的服務器上。

我檢查:

  • 這正確安裝的服務,我開始了它
  • 各種組合不使用的用戶名的域部分中,並加入的authType =基本
  • 給予了充分的權限到該文件夾​​給大家
  • 在IIS允許遠程連接
  • 添加管理服務我的「msdeploy」用戶的contentPath和iisApp的委派規則(鬆散地基於rea丁this
  • 與我使用RDC到服務器的不同管理員帳戶嘗試...
  • 不同contentPaths和不同msdeploy嘗試命令
  • 創建一個特定的帳戶,並補充說,考慮到IIS_Users。將該用戶添加到我的網站「IIS管理器權限」中,併爲所有提供者設置「管理服務委派」。

回答

56

我假設你已經正確配置您的服務器WebDeploy 2.0按這篇文章:

Configure Web Deploy (IIS.NET)

注: MS已經發布的Web 2.0部署的刷新和原文鏈接ISN」不再有效。我已經更新了這個,但我認爲隨着時間的推移它會成爲一個移動的目標。

您還需要在開發/構建/ CI機器上安裝Web Deploy 2.0。

如果你還在使用1.0,那麼我建議升級,在2.0中有一些巨大的改進。

使用Visual Studio 2010的發佈功能:

Visual Studio可以在網站上發佈通過右鍵單擊一個網站,然後選擇「發佈」。這帶來了以下的對話:

enter image description here

沒有與Visual Studio 2010和WebDeploy 2.0夫婦疑難雜症的的。首先是VS2010不支持WebDeploy/MSDeploy 2.0。所以,如果你嘗試發佈,你會得到一個錯誤,如下列:

Error 1 Web deployment task failed.((04/02/2011 12:30:40) An error occurred when the request was processed on the remote computer.)

enter image description here

您還將看到失敗請求下面的錯誤跟蹤在服務器上的Web管理服務C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1假設你有這樣的開啓:

AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracing deployment agent exception. Request ID ''. Request Timestamp: '02/04/2011
System.UnauthorizedAccessException: Access to the path 'D:\' is denied.

enter image description here

的驅動器盤符會有所不同艾科rding你的IIS站點位於哪個驅動器上。

開箱即用,GUI中的發佈機制默認使用錯誤版本的MSDeploy(1.0)。我們想告訴VS2010使用MSDeploy 2.0。您可以通過編輯Visual Studio 2010中的devenv.exe.config文件,該文件位於做到這一點(假設使用了默認c:\驅動器安裝):

對於64位系統:c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE 對於32位系統:c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE

打開了devenv.exe.config在你喜歡的XML編輯器(我只用Visual Studio 2010中本身),並複製下面的XML:

<dependentAssembly> 
    <assemblyIdentity 
    name="Microsoft.Web.Deployment" 
    publicKeyToken="31bf3856ad364e35" culture="neutral"/> 
    <bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/> 
</dependentAssembly> 

一下添加到/configuration/runtime/assemblyBinding部分:

enter image description here

完成此操作後,請關閉Visual Studio 2010的所有實例以使此更改生效。重新啓動VS2010,打開一個Web項目,然後嘗試再次發佈。這一次它應該是成功的。

發佈使用構建軟件包:

Visual Studio可以產生可以在命令行中執行的構建軟件包。這是使用Project -> Build Deployment Package生成的。方便持續集成等(包也可以使用msbuild與/t:Package開關生成)。

包的輸出文件夾通常默認爲obj\Package

不幸的是,Visual Studio 2010得到這個有點錯誤,並生成一個msdeploy包裝批處理腳本,目標爲1.0,並定位在服務器而不是站點級別的部署。

除了製作自己的msdeploy.exe命令行外,沒有其他的快速修復方法。我經歷了幾行拆分這使這個多一點可讀性:

 
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" 
    -source:archiveDir='d:\sites\DemoApp\obj\Package\Archive' 
    -dest: 
     auto, 
     computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', 
     userName='demosite', 
     password='somepassword', 
     authtype='basic', 
     includeAcls='False' 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml" 
    -allowuntrusted 

要注意的第一件事是通向msdeploy.exe。 Visual Studio生成1.0版的路徑。我改變了這個使用2.0。

值得注意的參數:

-source:archiveDir=告訴msdeploy我們正在部署一個包,並提供本地位置

computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename' - 這告訴MSDEPLOY部署到IIS7上一個特定的網站。 yoursitename應該與IIS中的站點名稱完全一致。

userNamepassword are是該網站的委託管理員用戶的名稱。這是使用站點級別的「IIS管理器權限」功能配置的。該帳戶需要是本地Windows用戶帳戶。

-authtype='basic' - 這強制基本認證,否則嘗試NTLM認證。

-allowuntrusted - 如果您使用內置的自簽名SSL證書,則會忽略任何SSL證書錯誤。

如果您使用該命令行,那麼您應該能夠成功部署到遠程IIS7服務器。

出版原始內容:

有時候,我們只想從本地文件夾中發佈一些靜態內容(或者甚至是一個傳統的ASP或PHP網站)直接。我們可以通過下面的msdeploy.exe命令行做到這一點:

 
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" 
    -source:contentPath='d:\websites\mysite' 
    -dest: 
    contentPath='yoursitename', 
    computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', 
    userName='demosite', 
    password='somepassword', 
    authtype='basic', 
    includeAcls='False' 
-verb:sync 
-allowuntrusted 

再次相同的規則之前申請-dest:contentPathcomputerName

我相信MSDeploy版本問題將在SP1中解決(我還沒有機會看看)。

研究最後VS2010疑難雜症:

當使用Visual Studio 2010的發佈,則「發佈」建立包導致該網站的匿名帳戶的ACL的改變爲只讀的所有文件和文件夾的除外App_Data文件夾更改爲讀取和寫入。

<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination> 

或者,如果你使用的MSBuild:

msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False 

我發現有用的金塊從

這可以通過左右下的每個<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">添加以下設置到.csproj文件來解決這裏:

Skipping setting an ACL in a Visual Studio 2010 deployment package (WayBackMachine link because the original content is no longer available)

+0

這是一個偉大的帖子凱夫 - 真正有用的信息在這裏。但是,對於我的問題,除非使用計算機管理員帳戶,否則我仍然會看到401驗證碼錯誤(在我自己的答案中進行了解釋)。 – 2011-06-02 07:33:53

+1

msdeploy.axd?site = yoursitename是爲我修復的。如果我離開了站點參數,我得到了401.謝謝 – Schneider 2011-07-20 08:03:59

+0

謝謝你這個可怕的答案。 ?site = ...是我剛剛度過了3個小時的生活! :) – Ragesh 2011-07-28 18:29:46

3

我們遇到了和您一樣的問題。

爲此,您需要啓動服務中的遠程代理服務。 我們使用了PC名稱,因爲IP地址發生錯誤。所以嘗試使用電腦名稱,用戶名和密碼。

1

最後我從來沒有做過suss出什麼p我用我的部署用戶帳戶丟失了錯誤 - 但發現如果我使用機器管理員帳戶,則部署將會成功。現在我正在使用管理員帳戶進行部署。

榮譽給千電子伏設立毫秒的奇妙和翔實的總結部署2 :)

6

對於我來說,發佈在Visual Studio中工作,但是當我跑了.deploy.cmd腳本沒有奏效。

通過在您的.csproj中設置<UseMsdeployExe>true</UseMsdeployExe>,您可以強制VS使用msdeploy.exe而不是MSBuild任務。然後打開日誌記錄級別(工具>選項>項目和解決方案>生成並運行> MSBuild項目生成輸出詳細程度),您可以看到VS使用的命令行。

.deploy.cmd的問題是:

  • 我的IIS用戶只有在該網站的權限,所以我在computerName需要?site=<SITENAME>
  • 我需要參數-dest:中的AuthType='Basic'
+1

感謝您提供屬性的建議 – 2012-06-15 19:38:54

0

這是值得的。發佈爲我工作,然後有一天我有這個相同的問題(401未經授權的錯誤)重新啓動VS2012解決了這個問題。希望在嘗試使用其他解決方案之前嘗試過。