gpt4 book ai didi

wcf - 如何从Makefile打包WCF服务?

转载 作者:行者123 更新时间:2023-12-04 19:59:26 25 4
gpt4 key购买 nike

我在Visual Studio中有一个WCF项目,需要将其部署到客户端的测试服务器。当我意识到我不知道如何将我的项目从Visual Studio 2010转移到可以部署在客户端服务器上的东西时,我濒临宣布“任务已完成”。

我要解决的问题是,在部署到客户端时,我们使用makefile进行构建和打包。这意味着我需要一个命令行可执行文件来执行部署WCF服务所需的一切。我确实发现右键单击该项目并选择“ Build Deployment Package”,但是由于我需要通过命令行执行,因此我认为这不会有太大帮助。

这个问题的第二点好处是,一旦我将打包的文件下载到客户端的服务器上,我就不确定该怎么做。现在,如果我知道打包的部署文件会带来什么,我可能会有一个更好的主意,但是在那之前,这全都是猜测。

最佳答案

好的,这就是我的想法。
打包
首先,包装。使用msbuild。这样的事情(显然,您需要使用v4或更高版本的.NET才能成功):
C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe {project_file} /t:package /target:Build /p:PlatformTarget=x86;
相当容易,对吧?
部署方式
现在,问题的奖励部分是部署。这包括容易部分和困难部分。最简单的部分是将使用msbuild.exe创建的.zip文件添加到IIS中。我发现了2种可能性。
命令行
第一个是命令行,它给了我一些问题(关于无法将“ 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)。最后,我关注用户权限。我发现,如果我将证书的私钥授予“所有人”用户权限(证书需要具有私钥),则一切正常。显然,这不是我想要为客户提供的解决方案,因此我寻找了正确的用户来授予权限。令人惊讶的是,这花了一段时间。我在各个网站上添加了网络服务,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我的LocalMachine -n​​“ {cert_name}”-查找指定证书的私钥文件;由于某种原因,这是您必须自己在Dev Studio中构建的工具(可从Microsoft下载的一些WCF示例中找到)
-cacls.exe {private_key_file_for_cert} / E / G“ IIS_IUSRS”-将用户添加到私钥权限的另一种方法
-mmc-启动已安装证书的管理器
-makecert -n“ CN = {CertificateAuthorityName}” -r -sv {CertificateAuthorityName} .pvk {CertificateAuthorityName} .cer-创建证书颁发机构cert
-makecert -sk {SignedCertName} -iv {CertificateAuthorityName} .pvk -n“ CN = {SignedCertName}” -ic {CertificateAuthorityName} .cer {SignedCertName} .cer -sr localmachine -ss My-创建由证书签名的证书权威
最后一件事:如果要使用mmc导入证书,则需要启动mmc,即File-> Add / Remove Snapin。添加证书管理单元。将证书颁发机构导入“受信任的根证书颁发机构”,并将证书颁发机构签署的证书导入“个人”。
希望您在这里过得愉快。请等待浏览器完全停止后再退出,并请记住随身携带任何个人物品。
其他发现
是时候将所有内容都部署到测试服务器(而不是我的开发机器)上了,我没想到会遇到所有麻烦。我再次在这里记录这些内容,以帮助其他一些可怜的,迷失的灵魂(或以后的我自己)。
-这应该是显而易见的:FindPrivateKey.exe不在服务器上。我不得不跳过一些箍才能到达那里。嗯
-服务器上仅安装了.NET的客户端4.0版本。当我发现此问题并意识到这是一个问题时,已经过去了几个小时。发现安装的.NET版本来自netfx_setupverifier,这是我从Microsoft的一个网站获得的。客户端版本不包括所有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中,并通过资源管理器授予权限-右键单击-属性)
-您可能需要为WCF添加处理程序映射。我强烈建议它在.NET v4.0的应用程序池下运行。

关于wcf - 如何从Makefile打包WCF服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com