Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C++ için Azure SDK'sında hata işleme öncelikli olarak C++ özel durumları aracılığıyla uygulanır. Bu yaklaşım standart C++ uygulamalarıyla uyumludur ve SDK genelinde net hata raporlama ve işleme olanağı sağlar. C++ uygulamanız Azure hizmetleriyle etkileşime geçtiğinde, kimlik doğrulaması sorunları, hizmetin kullanılamaması, geçersiz istekler veya kaynak kısıtlamaları gibi çeşitli nedenlerle işlemler başarısız olabilir. SDK bu hataları hata hakkında ayrıntılı bilgi sağlayan özel durumlar olarak yakalar.
Özel durum hiyerarşisi
Çekirdek özel durum türleri
C++ için Azure SDK' sı özel durum sınıfları hiyerarşisini kullanır ve en önemlileri şunlardır:
std::runtime_error- Azure'a özgü özel durumların devraldığı temel C++ standart özel durumu.Azure::Core::RequestFailedException-std::runtime_error'den türetilmiştir. Bu, tüm Azure hizmet isteği hataları için temel istisnadır. içindeazure/core/exception.hpptanımlanan bu özel durum, bir Azure hizmetine yönelik istek başarısız olduğunda oluşturulur. Şunları sağlar:- HTTP durum kodu
- Hizmetten gelen hata kodları
- Hata iletileri
- Sorun giderme için kimlik isteme
- Ham HTTP yanıtı
Azure::Core::OperationCancelledException-std::runtime_erroradlı öğeden türetilen bu özel durum, genellikle bir bağlam nesnesi aracılığıyla bir işlem iptal edildiğinde ortaya atılır.Azure::Core::Http::TransportException-Azure::Core::RequestFailedException'den türetilen bu istisna, bağlantı hataları gibi HTTP aktarım katmanında bir hata meydana geldiğinde ortaya çıkar.Azure::Core::Credentials::AuthenticationException-std::exceptionsınıfından türetilmiştir. Bu özel durum, Azure hizmetleriyle kimlik doğrulaması başarısız olduğunda oluşturulur.
Hizmete özgü özel durum türleri
Farklı Azure hizmetleri, hizmete özgü hata bilgileri sağlamak için temel özel durum türlerini genişletir:
Azure::Storage::StorageException- DepolamayaRequestFailedExceptionözgü diğer bilgilerle genişletir. Bu özel durum şunları içerir:- Depolamaya özgü hata kodları
- Yanıt gövdesinde ek bilgiler
- Başarısız depolama işlemiyle ilgili ayrıntılar
Azure::Messaging::EventHubs::EventHubsException- Event Hubs işlemlerine özgü bir özel durum. İçerik:- Hata koşulu (AMQP'den sembolik değer (Gelişmiş İleti Kuyruğa Alma Protokolü))
- Hata açıklaması
- Durum kodu
- Hatanın geçici olup olmadığı hakkında bilgi
Özel durumlarda hata bilgileri
RequestFailedException sınıfı, hizmet hataları hakkında zengin bilgiler içerir:
class RequestFailedException : public std::runtime_error {
public:
// The entire HTTP raw response
std::unique_ptr<Azure::Core::Http::RawResponse> RawResponse;
// The HTTP response code
Azure::Core::Http::HttpStatusCode StatusCode;
// The HTTP reason phrase from the response
std::string ReasonPhrase;
// The client request header (x-ms-client-request-id) from the HTTP response
std::string ClientRequestId;
// The request ID header (x-ms-request-id) from the HTTP response
std::string RequestId;
// The error code from service returned in the HTTP response
std::string ErrorCode;
// The error message from the service returned in the HTTP response
std::string Message;
/* ... constructors and other methods ... */
};
Hizmete özgü özel durumlar ek alanlar ekleyebilir. Örneğin, StorageException ekler AdditionalInformation:
struct StorageException final : public Azure::Core::RequestFailedException {
// Some storage-specific information in response body
std::map<std::string, std::string> AdditionalInformation;
/* ... constructors and other methods ... */
};
Özel durum işleme desenleri ve örnekleri
Hata kodlarını kullanma
Hizmet özel durumları, hataları işleme hakkında karar almak için kullanılabilecek değerler içerir ErrorCode . Depolama hizmetleriyle ilgili bir örnek aşağıda verilmişti:
try {
containerClient.Delete();
}
catch (Azure::Storage::StorageException& e) {
if (e.ErrorCode == "ContainerNotFound") {
// Ignore the error if the container does not exist
}
else {
// Handle other errors here
}
}
Temel özel durumları işleme
Azure SDK'da özel durumları işlemek için temel desen:
try {
// Perform an Azure SDK operation
result = client.SomeOperation();
}
catch (Azure::Core::RequestFailedException const& e) {
std::cout << "Request Failed Exception happened:" << std::endl << e.what() << std::endl;
if (e.RawResponse) {
std::cout << "Error Code: " << e.ErrorCode << std::endl;
std::cout << "Error Message: " << e.Message << std::endl;
}
// Handle or rethrow as appropriate
}
catch (std::exception const& e) {
std::cout << "Other exception: " << e.what() << std::endl;
// Handle general exceptions
}
Geçici hataları işleme
Event Hubs gibi bazı hizmetler hatanın geçici olup olmadığı hakkında bilgi sağlayarak yeniden deneme mantığı sağlar:
try {
// EventHubs operation
}
catch (Azure::Messaging::EventHubs::EventHubsException& e) {
if (e.IsTransient) {
// Retry the operation after a delay
}
else {
// Handle permanent failure
}
}
SDK, geçici hatalar için iç yeniden deneme ilkeleri uygular, ancak uygulama kodunuzda belirli durumları işlemek istiyorsunuz.
Hizmete özgü hata işleme
Depolama hizmetleri (Bloblar, Dosyalar, Kuyruklar vb.) için hataları hem hata kodlarına hem de HTTP durum kodlarına göre işleyebilirsiniz:
try {
shareClient.Delete();
}
catch (Azure::Storage::StorageException& e) {
if (e.ErrorCode == "ShareNotFound") {
// Ignore the error if the file share does not exist
}
else if (e.StatusCode == Azure::Core::Http::HttpStatusCode::Conflict) {
// Handle conflict error (e.g., resource in use)
std::cout << "Conflict error: " << e.Message << std::endl;
// Check additional information
for (auto const& info : e.AdditionalInformation) {
std::cout << info.first << ": " << info.second << std::endl;
}
}
else {
// Handle other errors based on status code or error code
std::cout << "Error: " << e.Message << " (Code: " << e.ErrorCode << ")" << std::endl;
}
}
Key Vault işlemleri için kimlik doğrulama özel durumlarını ayrı ayrı işlemeniz gerekebilir:
try {
// Key Vault operation
}
catch (Azure::Core::Credentials::AuthenticationException const& e) {
std::cout << "Authentication Exception happened:" << std::endl << e.what() << std::endl;
// Handle authentication failure (e.g., invalid credentials)
}
catch (Azure::Core::RequestFailedException const& e) {
std::cout << "Key Vault Client Exception happened:" << std::endl << e.Message << std::endl;
// Handle Key Vault specific errors
}
İş parçacığı güvenliğiyle ilgili dikkat edilmesi gerekenler
C++ için Azure SDK, istemci örneği yöntemlerinin iş parçacığı açısından güvenli ve birbirinden bağımsız olduğunu garanti eder. Bu, eşitleme olmadan birden çok iş parçacığında bir istemci örneğini güvenli bir şekilde kullanabileceğiniz anlamına gelir.
İş parçaları arasında özel durumları işlerken şunları aklınızda bulundurun:
- Özel durum nesneleri uygun şekilde senkronize edilmediği sürece iş parçacıkları arasında paylaşılmamalıdır.
-
RequestFailedExceptionderin bir kopya oluşturan ve iş parçacıkları arasında özel durum bilgilerini geçirmek gerektiğinde kullanılabilecek bir kopya oluşturucu içerir.