Mat*_*rts 38 iis visual-studio-2010 msdeploy msdeployserviceagent webdeploy
我正在尝试msdeploy
安装和设置.我已经在Web服务器上安装了远程服务,但我的所有测试都给了我一个401 unauthorised error
.服务器是Windows 2008 R2.
我正在测试一个非常简单的msdeploy命令:
msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword
Run Code Online (Sandbox Code Playgroud)
而错误:
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.
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为msdeploy的用户,并将其添加到服务器上的本地管理员组.
我检查过:
Kev*_*Kev 56
我假设您已根据本文为WebDeploy 2.0正确配置了服务器:
注意: MS已经发布了Web Deploy 2.0的刷新版本,原始链接不再有效.我已经对此进行了更新,但我认为随着时间的推移,这将是一个不断变化的目标.
您还需要在开发/构建/ CI计算机上安装Web Deploy 2.0.
如果您仍在使用1.0,那么我建议升级,2.0中有一些巨大的改进.
使用Visual Studio 2010的发布功能:
Visual Studio可以通过右键单击站点并选择"发布"来发布站点.这引出了以下对话:
Visual Studio 2010和WebDeploy 2.0有几个问题.首先是VS2010不支持WebDeploy/MSDeploy 2.0.因此,如果您尝试发布,您将收到如下错误:
错误1 Web部署任务失败.((04/02/2011 12:30:40)在远程计算机上处理请求时发生错误.)
C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
假设您已启用此功能,您还会在服务器上的Web管理服务的失败请求跟踪中看到以下错误:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData跟踪部署代理程序异常.请求ID''.请求时间戳:'02/
04/2011 System.UnauthorizedAccessException:拒绝访问路径'D:\'.
驱动器号将根据IIS站点所在的驱动器而有所不同.
开箱即用,GUI内发布机制默认使用错误版本的MSDeploy(1.0).我们想告诉VS2010使用MSDeploy 2.0.您可以通过编辑devenv.exe.config
位于的Visual Studio 2010 文件(假设您执行默认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>
Run Code Online (Sandbox Code Playgroud)
将其添加到以下/configuration/runtime/assemblyBinding
部分:
完成此操作后,关闭Visual Studio 2010的所有实例以允许此更改生效.重新启动VS2010,打开一个Web项目,然后再次尝试发布.这一次应该是成功的.
使用构建包发布:
Visual Studio可以生成可以从命令行执行的构建包.这是使用生成的Project -> Build Deployment Package
.方便连续集成等(也可以使用带/t:Package
开关的msbuild生成包).
包的输出文件夹通常默认为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中的站点名称完全匹配.
userName
并且password
是该站点的委派经理用户的名称.这是使用站点级别的"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:contentPath
和computerName
.
我相信MSDeploy版本问题将在SP1中得到解决(我还没有机会查看).
一个最终的VS2010问题:
使用Visual Studio 2010发布时,"发布"构建包会导致站点匿名帐户的ACL更改为"只读"所有文件和文件夹,但App_Data
更改为"读取"和"写入"的文件夹除外.
这可以通过将以下设置添加到.csproj
每个下面的文件来解决<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
Run Code Online (Sandbox Code Playgroud)
或者如果你正在使用msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
Run Code Online (Sandbox Code Playgroud)
我从这里发现了有用的金块:
跳过在Visual Studio 2010部署包中设置ACL(WayBackMachine链接,因为原始内容不再可用)
对我来说,发布在Visual Studio中工作,但是当我运行.deploy.cmd
脚本时它不起作用.
通过<UseMsdeployExe>true</UseMsdeployExe>
在您的设置中.csproj
,您可以强制VS使用msdeploy.exe而不是MSBuild任务.然后通过调高日志记录级别(工具>选项>项目和解决方案>构建并运行> MSBuild项目构建输出详细程度),您可以看到VS使用的命令行.
我的问题.deploy.cmd
是:
?site=<SITENAME>
在computerName
.AuthType='Basic'
的-dest:
参数. 归档时间: |
|
查看次数: |
19881 次 |
最近记录: |