2012-04-20 42 views
5

Tôi hiện đang làm việc trên quy trình triển khai tự động cho dịch vụ được lưu trữ cho Windows Azure. Việc tạo các tệp .cspkg.cscfg hoạt động hoàn hảo bằng cách gọi đến msbuild. Bây giờ tôi đang viết một ứng dụng giao diện điều khiển .NET nhỏ nên triển khai các tệp này tới Azure bằng cách sử dụng API REST quản lý.Không thể nâng cấp triển khai Azure bằng cách sử dụng API REST quản lý (vấn đề chứng chỉ SSL)

Không có vấn đề gì liên quan đến chính API. Tôi có thể gửi yêu cầu đến API bằng một trong các chứng chỉ quản lý của tôi. Tôi tải lên tệp .cspkg vào Lưu trữ BLOB Azure và sau đó thử gọi Upgrade Deployment. Nhưng mỗi khi tôi cố gắng, tôi nhận được một "400 yêu cầu xấu" phản ứng nói rằng giấy chứng nhận với dấu vân tay xy đã không được tìm thấy. Chứng chỉ này là chứng chỉ SSL (không phải chứng chỉ quản lý) Tôi đang sử dụng HTTPS cho tên miền tùy chỉnh của mình (DNS CNAME).

Và bây giờ, toàn bộ điều được thú vị:

Khi tôi triển khai các tập tin bằng cách sử dụng "Xuất bản" lệnh trong Visual Studio của tôi, không có vấn đề. (Tôi đã so sánh các tệp .cscfg/.cspkg từ VS và từ đầu ra msbuild của mình: ngoài một số GUID, chúng giống nhau). Và hơn nữa, sử dụng tính năng Quản lý Silverlight trong trình duyệt của tôi, tôi thậm chí có thể tải lên các tệp đã tạo của mình mà không thể tải lên bằng API.

Khi tôi truy xuất danh sách tất cả chứng chỉ bằng cách sử dụng cuộc gọi List Certificates, chứng chỉ được cho là bị thiếu có vẻ như ở đó. Tôi cũng có thể truy xuất dữ liệu của mình bằng cách sử dụng cuộc gọi Get Certificate.

Vậy tại sao Azure cứ nói với tôi rằng chứng chỉ không được tìm thấy khi sử dụng cuộc gọi Upgrade Deployment? Có ai có kinh nghiệm gì đó tương tự không? Có ai gợi ý cho tôi không? Cảm ơn trước.

P.S .: Điều này là những gì Azure nói khi tôi sử dụng 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 .: Có, từ trong phản ứng là certitficate, không certificate.

Trả lời

4

OK, sau khi sử dụng cuộc gọi API List Subscription Operations để tìm hiểu những gì Visual Studio gọi để triển khai ứng dụng, tôi đã tìm thấy giải pháp.

Chỉ ra rằng URL tôi đã sử dụng cho yêu cầu API là sai, nhưng: với tất cả sự tôn trọng, tôi đổ lỗi cho Microsoft vì đã ghi lại tài liệu Azure Management API.

Trong tài liệu của họ, họ viết URL để sử dụng là:

https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade

Và mô tả như sau:

Để tạo ra yêu cầu URI, thay thế < thuê bao id > với ID đăng ký của bạn, < tên dịch vụ > với tên dịch vụ của bạn, < vùng triển khai > với dàn dựng hoặc sản xuất và < tên triển khai > với tên duy nhất của triển khai của bạn.

Những gì họ quên đề cập đến được, mà bạn phải sử dụng Tên DNS dịch vụ của bạn, và không Name! Họ ít nhất có thể trả về một thông báo lỗi thích hợp cho bạn biết rằng tên dịch vụ không hợp lệ, không tồn tại hoặc không thuộc về ID đăng ký của bạn, thay vì phàn nàn về một số vấn đề về chứng chỉ.

Cảm ơn bạn Microsoft, điều đó khiến tôi mất hơn hai ngày.

+0

Tò mò, nhưng bạn nghĩ tên dịch vụ của bạn là gì? ID cá nhân và Tên triển khai đều là các giá trị Guid. Tên dịch vụ được lưu trữ là giá trị DNS thực tế (luôn được hạ thấp). Có tên nào khác (nhãn?). Nếu bạn sử dụng UpgradeDeployment, bạn cần Tên triển khai (guid), nếu không bạn có thể sử dụng * BySlot và trỏ đến một khe cụ thể. – dunnry

+0

Tên của dịch vụ không liên quan đến ID cá nhân hoặc tên triển khai. Các tham chiếu này đề cập đến * triển khai * và thay đổi bất cứ khi nào bạn tạo triển khai mới. Nhưng như bạn có thể thấy trong tài liệu, API cần tên dịch vụ ngay cả khi tôi muốn nâng cấp vùng triển khai hoặc triển khai mà tôi có thể xác định bằng GUID.Bạn cũng có thể phỏng đoán rằng từ mẫu URI mà tôi đã chỉ định trong câu trả lời của tôi, với thực tế là không có phần tùy chọn nào trong URI. Xem [screenshot] (http://dl.dropbox.com/u/17554533/azure.png) của tôi để kiểm tra xem "tên dịch vụ" và "tên DNS" có ý nghĩa gì đối với tôi. – fero

+0

Tôi đã hỏi tên bạn đang cố gắng sử dụng và phác thảo các kết hợp duy nhất có thể. Tôi đoán cổng thông tin có thể gây nhầm lẫn. May mắn thay, bạn luôn có thể sử dụng đầu ra API để điều khiển đầu vào và không phải đoán. – dunnry

0

Lỗi này cho biết bạn chưa tải chứng chỉ đó lên kho lưu trữ bí mật của dịch vụ lưu trữ. Visual Studio có thể làm điều đó một cách tự động cho bạn, nhưng nếu bạn muốn sao chép nó theo chương trình, thì hãy sử dụng lệnh Thêm API chứng chỉ và tải PFX vào triển khai.

+0

Chứng chỉ luôn ở đó. Trong câu hỏi của tôi, tôi đã viết rằng cuộc gọi 'List Certificates' đã hiển thị nó. Đối với vấn đề thực tế, xem câu trả lời của riêng tôi. – fero

+0

Thú vị khi thấy rằng bạn có thể gọi triển khai nâng cấp trên tên dịch vụ được lưu trữ không có thật và nhận được lỗi này (từ câu trả lời bên dưới). – dunnry

0

Bạn có thể thấy '400 BadRequest - Không tìm thấy chứng chỉ có dấu vân tay XYZ'. xuất hiện trong CreateDeployment hoặc kịch bản UpgradeDeployment vì lý do sau (mà tôi chỉ sửa lỗi):

  1. Bạn sử dụng cùng một chứng chỉ về quản lý thuê bao như bạn làm cho ví dụ Mã hóa mật khẩu SSL hoặc Remote Desktop trong dịch vụ lưu trữ của bạn. Do đó, bạn sẽ sử dụng chứng chỉ với dấu vân tay XYZ để xác thực cuộc gọi REST quản lý dịch vụ của bạn để tạo triển khai.
  2. Khi xác định các thông số triển khai của bạn, bạn vượt qua trong CSCFG của bạn mà tham chiếu cùng cert bằng vân tay của nó, bởi vì nó cần phải cấu hình Remote Desktop/SSL, vv
  3. Đó cert chưa được bổ sung vào bạn được lưu trữ dịch vụ Certs.

Trong trường hợp này 400 Bad Request lỗi thực sự là nói với bạn rằng bạn có một yêu cầu xấu, vì giấy chứng nhận trong CSCFG của bạn chưa được gắn liền với dịch vụ lưu trữ của bạn. Sự nhầm lẫn phát sinh (đối với tôi) bởi vì, vì một cert đa mục đích của nó, bạn hiểu sai thông báo lỗi như đề cập đến xác thực yêu cầu, mặc dù bạn không nhận được 401.

Các vấn đề liên quan