我目前正在为 Windows Azure 托管服务开发自动部署流程。使用 msbuild
调用可以完美创建 .cspkg
和 .cscfg
文件。现在,我正在编写一个小型 .NET 控制台应用程序,该应用程序应使用管理 REST API 将这些文件部署到 Azure。
API本身没有问题。我可以使用我的管理证书之一向 API 发送请求。我将 .cspkg
文件上传到 Azure BLOB 存储,然后尝试调用升级部署
。但每次尝试时,我都会收到“400 Bad Request”响应,指出未找到带有指纹 xy 的证书。此证书是我用于自定义域 (DNS CNAME) 的 HTTPS 的 SSL 证书(不是管理证书)。
现在,整件事变得有趣了:
当我在 Visual Studio 中使用“发布”命令部署文件时,没有问题。 (我比较了 VS 中的 .cscfg
/.cspkg
文件和我的 msbuild
输出:除了一些 GUID 之外,它们是相同的) 。此外,使用浏览器中的 Silverlight 管理工具,我什至可以上传使用 API 无法上传的生成文件。
当我使用List Certificates
调用检索所有证书的列表时,据说丢失的证书显然在那里。我还可以使用 获取证书
调用检索其数据。
那么为什么 Azure 在使用升级部署
调用时不断告诉我找不到证书?有人经历过类似的事情吗?有人给我提示吗?提前致谢。
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.:是的,响应中的单词是certificate
,而不是certificate
。
最佳答案
好的,使用 List Subscription Operations
后API 调用找出 Visual Studio 调用什么来部署应用程序,我找到了解决方案。
事实证明,我用于 API 请求的 URL 是错误的,但是:恕我直言,我责怪 Microsoft 糟糕地记录了其 Azure Management API .
在他们的文档中,他们写的要使用的 URL 是:
https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade
描述如下:
To generate the request URI, replace <subscription-id> with your subscription ID, <service-name> with the name of your service, <deployment-slot> with staging or production, and <deployment-name> with the unique name of your deployment.
他们忘记提及的是,您必须使用服务的 DNS 名称,而不是名称!他们至少可以返回一条适当的错误消息,告诉您服务名称无效、不存在或不属于您的订阅 ID,而不是提示某些证书问题。
谢谢 Microsoft,这花了我两天多的时间。
关于api - 无法使用管理 REST API 升级 Azure 部署(SSL 证书问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242893/