Azure::Core (azure-core) 提供以 C++ 撰寫的現代 Azure SDK 用戶端函式庫的共享原語、抽象與輔助工具。 這些函式庫遵循 Azure SDK C++ 設計指引。
此函式庫允許用戶端函式庫以一致的方式揭露共同功能。 一旦你學會在一個客戶端函式庫中使用這些 API,你也會知道如何在其他客戶端函式庫中使用它們。
入門指南
通常你不需要下載 azure-core;它會以客戶端函式庫的相依方式為你下載。 如果你想明確下載(例如實作自己的客戶端函式庫),可以在這裡找到原始碼,或使用 vcpkg 安裝套件 azure-core-cpp。
將套件包含進去
取得 C++ SDK 最簡單的方法是使用 vcpkg 套件管理器。 請參閱相應的 Azure SDK for C++ 說明說明部分。
透過 vcpkg 安裝 Azure Core 套件:
> vcpkg install azure-core-cpp
然後,在你的 CMake 檔案中使用:
find_package(azure-core-cpp CONFIG REQUIRED)
target_link_libraries(<your project name> PRIVATE Azure::azure-core)
重要概念
主要 Azure::Core 的共享概念包括:
- 透過串流資料及輸入/輸出(I/O)
BodyStream及其衍生型別來處理。 - 透過 存取任何 SDK 用戶端操作回傳模型的 HTTP 回應細節。
Response<T> - 長期運作(LRO)投票,來源為
Operation<T>。 - 透過基礎例外類型
RequestFailedException以一致方式報告服務請求錯誤的例外。 - Abstractions for Azure SDK credentials (
TokenCredential). - 可替換的 HTTP 傳輸層用於透過網路發送請求與接收回應。
- HTTP 管線與 HTTP 政策如重試與日誌,皆可透過服務客戶端專屬選項配置。
長時間執行的作業
有些操作需要很長時間才能完成,並且需要透過輪詢來確認其狀態。 啟動長期操作的方法回傳 Operation<T> 類型。
你可以間歇性地輪詢操作是否已完成,方法是對 Poll() 返回 Operation<T> 的 使用方法,並用 Value()來追蹤操作進度。 或者,如果你只想等操作完成,也可以使用 PollUntilDone()。
SomeServiceClient client;
auto operation = *client.StartSomeLongRunningOperation();
while (!operation.IsDone())
{
std::unique_ptr<Http::RawResponse> response = operation.Poll();
auto partialResult = operation.Value();
// Your per-polling custom logic goes here, such as logging progress.
// You can also try to abort the operation if it doesn't complete in time.
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
auto finalResult = operation.Value();
HTTP 傳輸介面卡
開箱即用的 Azure SDK for C++ 支援 libcurl 和 WinHTTP 函式庫,作為透過網路與 Azure 服務通訊的 HTTP 堆疊。 SDK 也提供 customer-implemented的機制。
你可以在這份文件中了解更多關於傳輸轉接器的資訊。
故障排除
故障排除的三種主要方法為:
- 檢查例外
- 啟用日誌功能(參見 SDK 日誌訊息)
SDK 日誌訊息
啟用日誌最簡單的方法是將 AZURE_LOG_LEVEL 環境變數設為以下值之一:|AZURE_LOG_LEVEL|Azure::Core::Diagnostics::Logger::Level|日誌訊息層級| |-|-|-| |4,或 error,或 err|Error|應用程式不太可能恢復的失敗日誌層級。|3,或 warning,或 warn|Warning|當函式未能執行預期任務時的日誌層級。|2,或 informational,或 information,或 info|Informational|函數正常運作時的日誌層級。|1,或 verbose,或 debug|Verbose|詳細故障排除情境的日誌層級。
接著,日誌訊息會被列印到主控台(stderr)。
請注意, stderr 訊息可以像這樣被導向到日誌檔:
在 Windows 上:
myprogram.exe 2> log.txt
在 Linux 或 macOS 上:
./myprogram 2> log.txt
此外,日誌訊息可透過回調功能進行程式化處理,該功能可將其儲存為檔案,或以自訂方式顯示。
#include <azure/core/diagnostics/logger.hpp>
int main()
{
using namespace Azure::Core::Diagnostics;
// See above for the level descriptions.
Logger::SetLevel(Logger::Level::Verbose);
// SetListener accepts std::function<>, which can be either lambda or a function pointer.
Logger::SetListener([&](auto lvl, auto msg){ /* handle Logger::Level lvl and std::string msg */ });
}
注意,監聽器回調執行在觸發日誌訊息的操作同一個執行緒上。 由於回調執行緒的日誌訊息處理量極少,因此推薦實作此方法。 若需要訊息處理,請考慮實作回調將訊息字串推入安全佇列,讓其他執行緒從該佇列中選取訊息並處理。
後續步驟
探索並安裝可用的 Azure SDK 函式庫。
Contributing
關於如何貢獻本資料庫的詳細資訊,請參閱 貢獻指南。
此項目歡迎參與和建議。 大部分的捐款都要求您同意「參與者許可協定」(CLA),宣告您有權,而且實際上確實會授與我們使用您貢獻的許可權。 詳情請參閱 貢獻者授權協議。
當您提交提取要求時,CLA-Bot 會自動判斷您是否需要提供 CLA 並適當裝飾 PR(例如標籤、批註)。 只要遵循 Bot 所提供的指示即可。 您只需要使用我們的 CLA 在所有存放庫上執行此動作一次。
此專案採用了 Microsoft 開放原始碼管理辦法。 如需詳細資訊,請參閱 《行為規範》常見問題 或連絡 opencode@microsoft.com,以取得任何其他問題或意見。
對貢獻者提供的額外有用連結
世界各地的許多人都幫助讓這個計畫變得更好。 你會想看看:
- 對於新加入這個回收的投稿者,有哪些適合的第一期?
- 如何建立並測試你的變更
- 你如何促成改變!
- 常見問題(FAQ)及詳細的 Azure SDK for C++ 維基中的概念主題。
報告安全問題與安全漏洞
安全問題與錯誤應私下透過電子郵件向 Microsoft 安全回應中心(MSRC) secure@microsoft.com回報。 您應該會在24小時內收到回覆。 如果由於某種原因您沒有收到,請透過電子郵件跟進,以確保我們收到您的原始訊息。 更多資訊,包括MSRC PGP金鑰,可於 Security TechCenter找到。
許可證
Azure SDK for C++ 採用 MIT 授權。