我目前正在为Windows Azure托管服务开展自动部署流程。通过调用.cspkg
,.cscfg
和msbuild
文件的创建工作完美。现在我正在编写一个小型.NET控制台应用程序,它应该使用Management REST API将这些文件部署到Azure。
API本身没有问题。我可以使用我的一个管理证书向API发送请求。我将.cspkg
文件上传到Azure BLOB存储,然后尝试调用Upgrade Deployment
。但每次我尝试时,都会收到一条“400 Bad Request”回复,指出没有找到带有指纹xy的证书。此证书是我用于自定义域(DNS CNAME)的HTTPS的SSL证书(不是管理证书)。
现在,整个事情变得有趣:
当我在Visual Studio中使用“发布”命令部署文件时,没有问题。 (我比较了来自VS和我的.cscfg
输出的.cspkg
/ msbuild
文件:除了一些GUID,它们是相同的)。此外,在浏览器中使用Silverlight Management,我甚至可以上传使用API无法上传的生成文件。
当我使用List Certificates
调用检索所有证书的列表时,据说缺少的证书显然存在。我也可以使用Get Certificate
调用来检索其数据。
那么为什么Azure在使用Upgrade Deployment
电话时仍然告诉我没有找到证书?有人经历过类似的事吗?有没有人 暗示我?提前谢谢。
P.S。:这是Azure在我使用API时所说的内容:
<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Code>BadRequest</Code>
<Message>The certitficate with thumbprint 7b232c4a2d6e3deadbeef120d5dbc1fe8049fbea was not found.</Message>
</Error>
P.P.S。:是的,答复中的字是certitficate
,而不是certificate
。
答案 0 :(得分:4)
好的,在使用List Subscription Operations
API调用找出Visual Studio调用部署应用程序的内容后,我找到了解决方案。
事实证明,我用于API请求的网址错误,但是:得到应有的尊重,我责怪微软记录其Azure Management API。
在他们的文档中,他们写下要使用的URL是:
https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade
描述如下:
要生成请求URI,请替换&lt; subscription-id&gt;使用您的订阅ID,&lt; service-name&gt;使用您的服务名称,&lt; deployment-slot&gt;使用暂存或生产,以及&lt; deployment-name&gt;使用部署的唯一名称。
他们忘记提及的是,您必须使用您服务的DNS名称,不是名称!他们至少可以返回一条相应的错误消息,告诉您服务名称无效,不存在或不属于您的订阅ID,而不是抱怨某些证书问题。
谢谢微软,这花了我两天多的时间。
答案 1 :(得分:0)
该错误表示您尚未将该证书上载到托管服务的秘密存储区。 Visual Studio可能会自动为您执行此操作,但如果您想以编程方式复制它,请使用Add Certificate API调用并将PFX上载到部署中。
答案 2 :(得分:0)
你可以看到'400 BadRequest - 找不到指纹XYZ的证书。出现在CreateDeployment或UpgradeDeployment场景中的原因如下(我刚刚调试过):
在这种情况下,400错误请求错误确实告诉您有错误请求,因为您的CSCFG中的证书尚未附加到您的托管服务。混淆产生(对我来说),因为,由于它是一个多用途证书,你误解了错误信息,指的是请求的身份验证,即使你没有得到401.