ربط مخرجات التخزين Azure Blob لوظائف Azure
يسمح لك ربط المخرجات بتعديل وحذف بيانات تخزين blob في دالة Azure.
للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع الاستعراض العام.
مثال
يمكن إنشاء الدالة C # باستخدام أحد أوضاع C # التالية:
- مكتبة الفئة أثناء العملية: الدالة C# المترجمة التي يتم تشغيلها في نفس العملية مثل وقت تشغيل الوظائف.
- مكتبة فئة العملية المعزولة: الدالة C # المترجمة التي يتم تشغيلها في عملية معزولة عن وقت التشغيل. مطلوب عملية معزولة لدعم وظائف C # التي تعمل على .NET 5.0.
- البرنامج النصي C#: يستخدم بشكل أساسي عند إنشاء وظائف C# في مدخل Azure.
المثال التالي هو دالة C # تعمل في العملية وتستخدم مشغل blob واثنين من روابط blob الإخراج. يتم تشغيل الدالة بواسطة إنشاء blob نسخة يفي حاوية عينات الصور. فإنه يخلق نسخة صغيرة ومتوسطة الحجم من صورة blob.
using System.Collections.Generic;
using System.IO;
using Microsoft.Azure.WebJobs;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
public class ResizeImages
{
[FunctionName("ResizeImage")]
public static void Run([BlobTrigger("sample-images/{name}")] Stream image,
[Blob("sample-images-sm/{name}", FileAccess.Write)] Stream imageSmall,
[Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageMedium)
{
IImageFormat format;
using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
{
ResizeImage(input, imageSmall, ImageSize.Small, format);
}
image.Position = 0;
using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
{
ResizeImage(input, imageMedium, ImageSize.Medium, format);
}
}
public static void ResizeImage(Image<Rgba32> input, Stream output, ImageSize size, IImageFormat format)
{
var dimensions = imageDimensionsTable[size];
input.Mutate(x => x.Resize(dimensions.Item1, dimensions.Item2));
input.Save(output, format);
}
public enum ImageSize { ExtraSmall, Small, Medium }
private static Dictionary<ImageSize, (int, int)> imageDimensionsTable = new Dictionary<ImageSize, (int, int)>() {
{ ImageSize.ExtraSmall, (320, 200) },
{ ImageSize.Small, (640, 400) },
{ ImageSize.Medium, (800, 600) }
};
}
يحتوي هذا القسم على الأمثلة التالية:
مشغل HTTP، باستخدام إخراج OutputBinding (Java)
يظهر المثال التالي دالة Java يستخدم HttpTrigger التعليق التوضيحي لتلقي معلمة تحتوي على اسم ملف في blob storage container. BlobInputثم يقرأ التعليق التوضيحي الملف ويمرر محتوياته إلى الدالة abyte[]. BlobOutputيرتبط التعليق التوضيحي بOutputBinding outputItem، والذي يتم استخدامه بعد ذلك بواسطة الدالة لكتابة محتويات blob الإدخال إلى حاوية التخزين المكونة.
@FunctionName("copyBlobHttp")
@StorageAccount("Storage_Account_Connection_String")
public HttpResponseMessage copyBlobHttp(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@BlobInput(
name = "file",
dataType = "binary",
path = "samples-workitems/{Query.file}")
byte[] content,
@BlobOutput(
name = "target",
path = "myblob/{Query.file}-CopyViaHttp")
OutputBinding<String> outputItem,
final ExecutionContext context) {
// Save blob to outputItem
outputItem.setValue(new String(content, StandardCharsets.UTF_8));
// build HTTP response with size of requested blob
return request.createResponseBuilder(HttpStatus.OK)
.body("The size of \"" + request.getQueryParameters().get("file") + "\" is: " + content.length + " bytes")
.build();
}
مشغل صف، باستخدام القيمة المرجعة للدالة (Java)
يظهر المثال التالي دالة Java يستخدم QueueTrigger التعليق التوضيحي لتلقي رسالة تحتوي على اسم ملف في blob storage container. BlobInputثم يقرأ التعليق التوضيحي الملف ويمرر محتوياته إلى الدالة abyte[]. BlobOutputيرتبط التعليق التوضيحي بالقيمة المرجعة للدالة، والذي يتم استخدامه بعد ذلك بواسطة الدالة لكتابة محتويات blob الإدخال إلى حاوية التخزين المكونة.
@FunctionName("copyBlobQueueTrigger")
@StorageAccount("Storage_Account_Connection_String")
@BlobOutput(
name = "target",
path = "myblob/{queueTrigger}-Copy")
public String copyBlobQueue(
@QueueTrigger(
name = "filename",
dataType = "string",
queueName = "myqueue-items")
String filename,
@BlobInput(
name = "file",
path = "samples-workitems/{queueTrigger}")
String content,
final ExecutionContext context) {
context.getLogger().info("The content of \"" + filename + "\" is: " + content);
return content;
}
في مكتبة وقت تشغيل وظائف Java، استخدم التعليق @BlobOutput التوضيحي على معلمات الدالة التي تم كتابة قيمتها إلى عنصر في تخزين blob. ينبغي أن يكون نوع معاملة OutputBinding<T>، حيث T هو أي نوع Java أصلي أو POJO.
يظهر المثال التالي ارتباطات إدخال وإخراج blob في ملفfunction.json والتعليمة البرمجية JavaScript التي تستخدم الارتباطات. تقوم الدالة بنسخ blob. يتم تشغيل الدالة بواسطة رسالة قائمة انتظار تحتوي على blob للنسخ. تُسمى blob الجديدة {originalblobname}-Copy.
في ملفfunction.json، queueTriggerتُستخدم خاصية بيانات التعريف لتحديد اسم blob في path الخصائص:
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "myInputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"name": "myOutputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}-Copy",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false
}
يشرح قسم التكوين هذه الخصائص.
هنا رمز JavaScript:
module.exports = async function(context) {
context.log('Node.js Queue trigger function processed', context.bindings.myQueueItem);
context.bindings.myOutputBlob = context.bindings.myInputBlob;
};
يوضح المثال التالي كيفية إنشاء نسخة من blob واردة كما الإخراج من دالة PowerShell.
في ملف تكوين الوظيفة (function.json)، trigger يتم استخدام خاصية بيانات التعريف لتحديد اسم blob في path الخصائص.
ملاحظة
لتجنب الحلقات اللانهائية، تأكد من اختلاف مسارات الإدخال والإخراج.
{
"bindings": [
{
"name": "myInputBlob",
"path": "data/{trigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in",
"type": "blobTrigger"
},
{
"name": "myOutputBlob",
"type": "blob",
"path": "data/copy/{trigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false
}
هنا رمز PowerShell:
# Input bindings are passed in via param block.
param([byte[]] $myInputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger function Processed blob Name: $($TriggerMetadata.Name)"
Push-OutputBinding -Name myOutputBlob -Value $myInputBlob
يظهر المثال التالي ارتباطات الإدخال والإخراج blob في function.json الملف ورمز Python التعليمات البرمجية التي تستخدم الارتباطات. تقوم الدالة بنسخ blob. يتم تشغيل الدالة بواسطة رسالة قائمة انتظار تحتوي على blob للنسخ. تُسمى blob الجديدة {originalblobname}-Copy.
في ملفfunction.json، queueTriggerتُستخدم خاصية بيانات التعريف لتحديد اسم blob في path الخصائص:
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "queuemsg",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "inputblob",
"type": "blob",
"dataType": "binary",
"path": "samples-workitems/{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"name": "outputblob",
"type": "blob",
"dataType": "binary",
"path": "samples-workitems/{queueTrigger}-Copy",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false,
"scriptFile": "__init__.py"
}
يشرح قسم التكوين هذه الخصائص.
فيما يلي التعليمة البرمجية لـ Python:
import logging
import azure.functions as func
def main(queuemsg: func.QueueMessage, inputblob: bytes, outputblob: func.Out[bytes]):
logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
outputblob.set(inputblob)
السمات
تستخدم كل من مكتبات C# العملية قيد المعالجةوالعملية المعزولة سمة لتحديد الدالة. يستخدم البرنامج النصي C # بدلا من ذلك ملف تكوين function.json.
يأخذ منشئ السمة BlobAttribute المعلمات التالية:
| المعلمة | الوصف |
|---|---|
| BlobPath | الطريق إلى blob. |
| الاتصال | اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات. |
| Access | يشير إلى ما إذا كنت ستقرأ أو تكتب. |
يقوم المثال التالي بتعيين المسار إلى النقطة ومعلمة FileAccess تشير إلى الكتابة لربط المخرجات:
[FunctionName("ResizeImage")]
public static void Run(
[BlobTrigger("sample-images/{name}")] Stream image,
[Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
{
...
}
بينما تأخذ السمة خاصية Connection ، يمكنك أيضا استخدام السمة StorageAccountAttribute لتحديد اتصال حساب تخزين. يمكنك القيام بذلك عندما تحتاج إلى استخدام حساب تخزين مختلف عن الوظائف الأخرى في المكتبة. تأخذ الدالة الإنشائية اسم إعداد تطبيق يحتوي على سلسلة اتصال تخزين. يمكن تطبيق السمة على مستوى المعلمة أو الأسلوب أو الفئة. يُظهر المثال التالي مستوى الفئة ومستوى الأسلوب:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("StorageTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
...
}
يتم تحديد حساب التخزين للاستخدام بالترتيب التالي:
- خاصية المشغل أو السمة الملزمة
Connection. - تم تطبيق السمة
StorageAccountعلى نفس المعلمة مثل سمة المشغل أو الربط. - السمة
StorageAccountالمطبقة على الوظيفة. - السمة
StorageAccountالمطبقة على الفئة. - حساب التخزين الافتراضي لتطبيق الوظيفة، والذي يتم تعريفه في
AzureWebJobsStorageإعداد التطبيق.
عند التطوير محليا، أضف إعدادات التطبيق في الملف local.settings.json في Values المجموعة.
تعليقات توضيحية
@BlobOutputتمنحك السمة حق الوصول إلى blob الذي أدي إلى تشغيل الدالة. إذا كنت تستخدم صفيف بايت مع السمة، قم بتعيين dataType إلى binary. راجع مثال الإخراج للحصول على التفاصيل.
التكوين
يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.
| خاصية function.json | خاصية السمة | الوصف |
|---|---|---|
| النوع | يجب تعيينها إلى blob. |
|
| direction | يجب التعيين لربط out المخرجات. تتم الإشارة إلى الاستثناءات في قسم الاستخدام. |
|
| الاسم | اسم المتغير الذي يمثل blob في التعليمات البرمجية الدالة. تعيين $return إلى مرجع القيمة المرجعة للدالة. |
|
| المسار | المسار إلى حاوية blob. | |
| الاتصال | اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات. |
راجع قسم المثال للحصول على أمثلة كاملة.
الاستخدام
يعتمد استخدام ربط إخراج Blob على إصدار حزمة الإضافة ، وطريقة C # المستخدمة في تطبيق الوظائف الخاص بك ، والتي يمكن أن تكون واحدة مما يلي:
مكتبة الفئة أثناء العملية هي دالة C# مترجمة يتم تشغيلها في نفس العملية مثل وقت تشغيل الوظائف.
اختر إصدارا للاطلاع على تفاصيل الاستخدام للوضع والإصدار.
يتم دعم أنواع المعلمات التالية لكافة الإصدارات:
StreamTextReaderstringByte[]
أنواع المعلمات التالية خاصة بإصدار الإضافة وتتطلب FileAccess.ReadWrite في مكتبة فئة C # الخاصة بك:
للحصول على أمثلة باستخدام هذه الأنواع، انظر إلي مستودع GitHub لملحق البرنامج. تعرف على المزيد عن هذه الأنواع الجديدة المختلفة وكيفية الترحيل إليها من دليل ترحيل Azure.Storage.Blobs.
يمكنك أيضا استخدام السمة StorageAccountAttribute لتحديد حساب التخزين المراد استخدامه. يمكنك القيام بذلك عندما تحتاج إلى استخدام حساب تخزين مختلف عن الوظائف الأخرى في المكتبة. تأخذ الدالة الإنشائية اسم إعداد تطبيق يحتوي على سلسلة اتصال تخزين. يمكن تطبيق السمة على مستوى المعلمة أو الأسلوب أو الفئة. يُظهر المثال التالي مستوى الفئة ومستوى الأسلوب:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
يتم تحديد حساب التخزين للاستخدام بالترتيب التالي:
- خاصية
BlobTriggerالسمةConnection. StorageAccountالسمة المطبقة على نفس المعلمة المماثلة لهاBlobTrigger.- السمة
StorageAccountالمطبقة على الوظيفة. - السمة
StorageAccountالمطبقة على الفئة. - حساب التخزين الافتراضي لتطبيق الوظيفة، والذي يتم تعريفه في
AzureWebJobsStorageإعداد التطبيق.
الارتباط ب string، أو Byte[] يوصى به فقط عندما يكون حجم الفقاعة صغيرا. يوصى بذلك لأنه يتم تحميل محتويات blob بالكامل في الذاكرة. بالنسبة لمعظم النقط، استخدم علامة Stream أو CloudBlockBlob نوعا. لمزيد من المعلومات، راجع التزامن واستخدام الذاكرة.
إذا تلقيت رسالة خطأ عند محاولة الارتباط بأحد أنواع SDK للتخزين، فتأكد من أن لديك مرجعا إلى إصدار Storage SDK الصحيح.
@BlobOutputتمنحك السمة حق الوصول إلى blob الذي أدي إلى تشغيل الدالة. إذا كنت تستخدم صفيف بايت مع السمة، قم بتعيين dataType إلى binary. راجع مثال الإخراج للحصول على التفاصيل.
الوصول إلى البيانات blob باستخدام context.bindings.<BINDING_NAME>، حيث يتم تعريف اسم الربط function.json الملف.
يمكنك الوصول إلى بيانات كائن ثنائي كبير الحجم عبر معلمة تطابق الاسم المعين بواسطة معلمة اسم الربط في ملفfunction.json.
يمكنك تعريف معلمات الدالة كالأنواع التالية للكتابة إلى تخزين blob:
- سلاسل ك
func.Out[str] - مسارات ك
func.Out[func.InputStream]
راجع مثال الإخراج للحصول على التفاصيل.
الاتصالات
connection الخاصية هي مرجع إلى تكوين البيئة الذي يحدد كيفية اتصال التطبيق ب Azure Blobs. وقد تحدد ما يلي:
- اسم إعداد تطبيق يحتوي على سلسلة اتصال
- اسم بادئة مشتركة لإعدادات تطبيق متعددة، تحدد معا اتصالا يستند إلى الهوية.
إذا كانت القيمة التي تم تكوينها مطابقة تامة لإعداد واحد ومطابقة بادئة لإعدادات أخرى، استخدام التطابق التام.
سلسلة الاتصال
للحصول على سلسلة اتصال، اتبع الخطوات الموضحة في إدارة مفاتيح الوصول إلى حساب التخزين. يجب أن تكون سلسلة الاتصال لحساب تخزين للأغراض العامة، وليس حساب تخزين Blob.
يجب تخزين سلسلة الاتصال هذه في إعداد تطبيق باسم يطابق القيمة المحددة بواسطة connection خاصية تكوين الربط.
إذا كان اسم إعداد التطبيق يبدأ بـ "AzureWebJobs"، يمكنك تحديد باقي الاسم هنا فقط. على سبيل المثال، إذا قمت بتعيين connection "MyStorage"، يبحث وقت تشغيل الوظائف عن إعداد تطبيق يسمى "AzureWebJobsMyStorage". إذا تركت connection فارغا، فسيستخدم وقت تشغيل الوظائف سلسلة اتصال التخزين الافتراضية في إعداد التطبيق المسمى AzureWebJobsStorage.
الاتصالات القائمة على الهوية
إذا كنت تستخدم الإصدار 5.x أو أعلى من الملحق، فبدلا من استخدام سلسلة اتصال مع سر، يمكنك جعل التطبيق يستخدم هوية Azure Active Directory. للقيام بذلك ، يمكنك تحديد الإعدادات تحت بادئة شائعة تقوم بتعيين connection الخاصية في تكوين المشغل والربط.
إذا كنت تقوم بالإعداد connection إلى "AzureWebJobsStorage"، فراجع الاتصال بمساحة تخزين مضيفة باستخدام هوية. بالنسبة لكافة الاتصالات الأخرى، يتطلب الملحق الخصائص التالية:
| الخاصية | قالب متغير البيئة | الوصف | قيمة المثال |
|---|---|---|---|
| Blob Service URI | <CONNECTION_NAME_PREFIX>__serviceUri1 |
مستوى البيانات URI لخدمة blob التي تتصل بها ، باستخدام مخطط HTTPS. | https://< storage_account_name.blob.core.windows.net> |
<CONNECTION_NAME_PREFIX>__blobServiceUri 1 يمكن استخدامها كاسم مستعار. إذا كان سيتم استخدام تكوين الاتصال بواسطة مشغل نقطة ، blobServiceUri فيجب أن يكون مصحوبا queueServiceUriأيضا ب . انظر أدناه.
serviceUri لا يمكن استخدام النموذج عند استخدام تكوين الاتصال العام عبر النقط و/أو قوائم الانتظار و/أو الجداول. يمكن ل URI نفسه تعيين خدمة blob فقط. كبديل ، يمكنك توفير عنوان URI خصيصا لكل خدمة ، مما يسمح باستخدام اتصال واحد. إذا تم توفير كلا الإصدارين ، استخدام النموذج متعدد الخدمات. لتكوين الاتصال لخدمات متعددة، بدلا من ، قم بتعيين <CONNECTION_NAME_PREFIX>__serviceUri:
| الخاصية | قالب متغير البيئة | الوصف | قيمة المثال |
|---|---|---|---|
| Blob Service URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
مستوى البيانات URI لخدمة blob التي تتصل بها ، باستخدام مخطط HTTPS. | https://< storage_account_name.blob.core.windows.net> |
| URI لخدمة قائمة الانتظار (مطلوب لمشغلات blob2) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
مستوى البيانات URI لخدمة قائمة انتظار، باستخدام مخطط HTTPS. هذه القيمة مطلوبة فقط لمشغلات blob. | https://< storage_account_name.queue.core.windows.net> |
2 يعالج مشغل الفقاعة الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة نقاط سامة في قائمة انتظار. في serviceUri النموذج ، AzureWebJobsStorage يتم استخدام الاتصال. ومع ذلك ، عند التحديد blobServiceUri، يجب أيضا توفير URI لخدمة قائمة الانتظار مع queueServiceUri. يوصى باستخدام الخدمة من نفس حساب التخزين مثل خدمة blob. ستحتاج أيضا إلى التأكد من أن المشغل يمكنه قراءة الرسائل وكتابتها في خدمة قائمة الانتظار التي تم تكوينها عن طريق تعيين دور مثل "مساهم بيانات قائمة انتظار التخزين".
قد يتم تعيين خصائص إضافية لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المستندة إلى الهوية.
عند استضافتها في خدمة Azure Functions، تستخدم الاتصالات المستندة إلى الهوية هوية مدارة. تستخدم الهوية المعينة من قبل النظام بشكل افتراضي على الرغم من إمكانية تحديد هوية معينة من قبل المستخدم مع خصائص credential و clientID. عند التشغيل في سياقات أخرى، مثل التطوير المحلي، يتم استخدام هوية المطور بدلا من ذلك، على الرغم من أنه يمكن تخصيصها. راجع التنمية المحلية مع الاتصالات القائمة على الهوية.
منح الإذن للهوية
مهما كانت الهوية المستخدمة يجب أن يكون لديك أذونات لتنفيذ الإجراءات المقصودة. ستحتاج إلى تعيين دور في Azure RBAC، باستخدام أدوار مضمنة أو مخصصة توفر هذه الأذونات.
هام
قد تعرض بعض الأذونات بواسطة الخدمة الهدف غير الضرورية لكافة السياقات. حيثما أمكن، الالتزام بمبدأ أقل امتيازومنح الهوية الامتيازات المطلوبة فقط. على سبيل المثال، إذا كان التطبيق يحتاج فقط إلى أن يكون قادرا على القراءة من مصدر بيانات، فاستخدم دورا لديه إذن للقراءة فقط. سيكون من غير المناسب تعيين دور يسمح أيضا بالكتابة إلى تلك الخدمة ، لأن هذا سيكون إذنا مفرطا لعملية قراءة. وبالمثل ، قد ترغب في التأكد من أن تعيين الدور يتم تحديده فقط على الموارد التي تحتاج إلى قراءة.
ستحتاج إلى إنشاء تعيين دور يوفر الوصول إلى حاوية blob في وقت التشغيل. إن أدوار الإدارة، مثل Owner، غير كافية. يعرض الجدول التالي الأدوار المضمنة الموصى بها عند استخدام ملحق Blob Storage في التشغيل العادي. قد يتطلب التطبيق الخاص بك أذونات إضافية استنادا إلى التعليمة البرمجية التي تكتبها.
| نوع الربط | مثال على الأدوار المضمنة |
|---|---|
| مشغّل | مالك بيانات التخزين Blobومساهمبيانات قائمة انتظار التخزين1 يجب أيضا منح أذونات إضافية لاتصال AzureWebJobsStorage. 2 |
| ربط بيانات الإدخال | قارئ بيانات للبيانات الثنائية الكبيرة للتخزين |
| ربط بيانات الإخراج | مالك بيانات كائن ثنائي كبير الحجم للتخزين |
1 يعالج مشغل blob الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة نقاط السم إلى قائمة انتظار على حساب التخزين المحدد بواسطة الاتصال.
2 يتم استخدام اتصال AzureWebJobsStorage داخليا للنقاط وقوائم الانتظار التي تمكن المشغل. إذا تم تكوينه لاستخدام اتصال يستند إلى الهوية، فستحتاج إلى أذونات إضافية تتجاوز المتطلبات الافتراضية. يتم تغطية هذه الأدوار من خلال أدوار مالك بيانات Storage Blob و Storage Queue Data Contributor و Storage Account Contributor . لمعرفة المزيد، راجع الاتصال بمساحة تخزين المضيف باستخدام هوية.
الاستثناءات والتعليمات البرمجية للإرجاع
| Binding | المرجع |
|---|---|
| كائن ثنائي كبير الحجم | رموز خطأ Blob |
| blob، الجدول، صف | رموز خطأ Storage |
| كائن ثنائي كبير الحجم، جدول، قائمة الانتظار | استكشاف الأخطاء وإصلاحها |