REW*_*REW 2 deployment wcf makefile
我在Visual Studio中有一个WCF项目,我需要将其部署到客户端的测试服务器上.当我意识到我不知道如何将我的项目从Visual Studio 2010转移到我可以在客户端的服务器上部署的东西时,我正处于宣布"Mission Accompleished"的边缘.
我对此问题的要点是,在部署到客户端时,我们使用makefile进行构建和打包.这意味着我需要一个命令行可执行文件来执行我需要做的任何事情来部署我的WCF服务.我确实发现右键单击项目并选择"构建部署包",但由于我需要通过命令行执行,所以我认为这不会有太大帮助.
这个问题的第二部分是,一旦我将打包文件作为客户端的服务器,我不知道如何处理它.现在,如果我知道对打包的部署文件有什么期望,我可能会有更好的想法,但在此之前,这只是猜测.
好的,这就是我想出来的.
首先是包装.使用msbuild.像这样的东西(显然你需要使用v4或更好的.NET版本才能成功):
C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe {project_file} /t:package /target:Build /p:PlatformTarget=x86;
相当简单,对吧?
现在,问题的奖金部分,部署.这包括简单部分和硬部分.简单的部分是将msbuild.exe添加到IIS中创建的.zip文件.我找到了两种可能性.
第一个是命令行,它给了我一些问题(关于无法投射' Microsoft.Web.Deployment.DeploymentProviderOptions '来输入' Microsoft.Web.Deployment.DeploymentProviderOptions '--- 我知道,对吗?).无论如何,这是我使用的命令行.它可能会帮助某人,也可能不会.我再次遇到了问题.
c:\inetpub\wwwroot>"c:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -presync:runCommand="md c:\inetpub\wwwroot\{MyWCFCodeDest} & c:\windows\system32\inetsrv\appcmd add site /name:{MyWCFCodeDest} /id:22 bindings:http/*:54095: /physicalPath:c:\inetpub\wwwroot\{MyWCFCodeDest}" -source:package={ZipFileFromMSBuild.exe} -dest:auto -setParam:"IIS Web Application Name"="{MyIISName}"
好的,所以我觉得我会很高兴使用第二种方式.如果你不关心自动化,它是迄今为止最简单的.打开IIS管理器,右键单击计算机或网站(取决于您是将其作为自己的网站还是现有网站中的应用程序),部署,导入,然后按照向导进行操作.
而现在我花了大部分时间.我点击了我新部署的.svc文件并收到错误消息.此错误涉及我使用的证书.现在,也许不是所有部署都不必担心这一点,但我的确如此.错误是冗长的,关于"密钥集不存在"和"由于编译期间的异常而无法激活"和"可能没有能够进行密钥交换的私钥或者进程可能没有私有访问权限"关键".我尝试了很多东西,包括使用mmc重新导入证书和makecert来重新创建我的CA和我的个人证书.这对我来说都不是问题(ymmv).最后,我专注于用户权限.我发现,如果我将Everyone用户的权限授予证书的私钥(证书需要私钥),那么一切都有效.显然不是我想要的客户端解决方案,所以我追捕了正确的用户权限.令人惊讶的是,这需要一段时间.各种网站让我添加了网络服务,ASPNET,当前用户,在machine.config中指定的用户(在某个.NET目录中),IIS_ {MachineName} ......这些都没有.我必须添加的是IIS_IUSRS.
所以,尽管遵循了所有的指示,但是当你在显示器上尖叫时,一些可能有助于你理智的鱼子酱对你不起作用.因为显然IIS随着时间的推移变化太大而且这个问题很重要:
Windows 7 Ultimate sp1
IIS 7.5.7600.16385
此外,您可能感兴趣的一些命令行工具:
- winhttpcertcfg.exe -l -c LOCAL_MACHINE\My -s"{cert_name}" - 列出授权访问证书私钥的用户(您也可以使用旧版本的私钥)通过文件属性的方式); 我尝试下载winhttpcertcfg.exe,但它是Windows 2003软件包的一部分,它提供了不兼容的警告(不确定它是否来自我尝试安装该文件,或者它现在是否已经安装了我已经安装过的东西)
- winhttpcertcfg .exe -g -c LOCALHOST\My -s"{cert_name}"-a IIS_IUSRS - 将IIS_IUSRS添加到证书私钥的权限
- findprivatekey.exe My LocalMachine -n"{cert_name}" - 查找私钥指定证书的文件; 出于某种原因,这是一个你必须自己在Dev Studio中构建的工具(在从微软下载的一些WCF示例中找到)
- cacls.exe {private_key_file_for_cert}/E/G"IIS_IUSRS" - 另一种添加方法用户到私钥的权限
- mmc - 启动已安装证书的管理员
- makecert -n"CN = {CertificateAuthorityName}" - r -sv {CertificateAuthorityName} .pvk {CertificateAuthorityName} .cer - 创建证书颁发机构证书
- makecert -sk {SignedCertName} -iv {CertificateAuthorityName} .pvk -n"CN = {SignedCertName}" - ic {CertificateAuthorityName} .cer {SignedCertName} .cer -sr localmachine -ss My - 创建由证书颁发机构签名的证书
最后一件事:如果要使用mmc导入证书,则需要启动mmc,File-> Add/Remove Snapin.添加证书管理单元.将证书颁发机构导入受信任的根证书颁发机构,并将证书颁发机构签署的证书导入Personal.
希望你在这里享受骑行乐趣.请等待浏览器在退出前完全停止,请记得随身携带任何个人物品.
当需要将所有内容部署到测试服务器(而不是我的开发机器)时,我没想到遇到的所有麻烦.我在这里再次记录这些,以帮助其他一些可怜的,失去灵魂的人(或者我以后的日子).
- 这个应该很明显:FindPrivateKey.exe不在服务器上.我不得不跳过一些箍来把它拿到那里.因人而异.
- 只有客户端4.0版本的.NET已安装在服务器上.当我发现这个并意识到这是一个问题时,几个小时过去了.安装的.NET版本的发现来自netfx_setupverifier,我是从微软的一个网站获得的.客户端版本不包括所有WCF内容.
-IIS需要一些额外的设置(在.NET Framework版本目录中找到的文件,从命令行运行):
aspnet_regiis.exe -i -enable
ServiceModelReg.exe -r
- cacls.exe通知我它已被弃用,我应该使用icacls.exe.icacls的命令行是这样的:(
icacls.exe {private_key_file_for_cert} /GRANT "IIS_IUSRS":R注意,对我来说并不完全适用,但你可以随时转到{private_key_file_for_cert}文件,可能在ProgramData\Microsoft\Crypto\RSA\MachineKeys中,并通过Explorer提供权限 -右键单击 - 属性)
- 您可能需要为WCF添加处理程序映射.我强烈建议让它在.NET v4.0的应用程序池下运行.
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |