2016-10-04 32 views

cevap

17

Binderfunction.json meta dosyası üzerinden bildirimli aksine kodunuzda imperatively bağlamaları gerçekleştirmek sağlayan gelişmiş bağlama tekniğidir. Bağlama yolunun veya diğer girdilerin hesaplamasının işlevinizdeki çalışma zamanında gerçekleşmesi gereken durumlarda bunu yapmanız gerekebilir. Bir Binder parametresi kullanıldığında, 'un değil, bu parametre için function.json karşılık gelen bir girdi içermesi gerektiğini unutmayın.

Aşağıdaki örnekte, blob çıktısına dinamik olarak bağlanıyoruz. Görebildiğiniz gibi, kodda bağlayıcı olduğunu beyan ettiğiniz için, yol bilginiz herhangi bir şekilde hesaplanabilir. Diğer ham ciltleme özelliklerine de bağlayabileceğinizi unutmayın (ör. QueueAttribute/EventHubAttribute/ServiceBusAttribute/etc.) Birden çok kez bağlamak için yinelemeli olarak da yapabilirsiniz.

BindAsync'a aktarılan tip parametresinin (bu durumda TextWriter) hedef bağlanmanın desteklediği bir tür olması gerektiğini unutmayın. Burada

using System; 
using System.Net; 
using Microsoft.Azure.WebJobs; 

public static async Task<HttpResponseMessage> Run(
     HttpRequestMessage req, Binder binder, TraceWriter log) 
{ 
    log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}"); 

    // determine the path at runtime in any way you choose 
    string path = "samples-output/path"; 

    using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute(path))) 
    { 
     writer.Write("Hello World!!"); 
    } 

    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

Ve tekabül meta geçerli:

niteliklerin bir dizisi almak bağlamak aşırı yükler vardır
{ 
    "bindings": [ 
    { 
     "name": "req", 
     "type": "httpTrigger", 
     "direction": "in" 
    }, 
    { 
     "name": "res", 
     "type": "http", 
     "direction": "out" 
    } 
    ] 
} 

. Hedef depolama hesabını denetlemeniz gereken durumlarda, bağlama türü özniteliğinden başlayarak (ör. BlobAttribute) ve kullanmak için hesaba işaret eden bir StorageAccountAttribute örneğini içeren bir öznitelik koleksiyonunu geçirirsiniz. Örneğin:

var attributes = new Attribute[] 
{ 
    new BlobAttribute(path), 
    new StorageAccountAttribute("MyStorageAccount") 
}; 
using (var writer = await binder.BindAsync<TextWriter>(attributes)) 
{ 
    writer.Write("Hello World!"); 
} 
+0

Blob yolu, gelen bir nesneden gelmeyen ve çalışma zamanında hesaplanan bilgi içermesi durumunda, yolu ile kullanmak mümkün mü? –

+0

Belki de cehaletim, ancak bağlamalarda herhangi bir yerde herhangi bir depolama hesabı belirtilmemişse, çıktı için hangi depolama hesabı kullanılacaktır? –

+1

Bu noktada, yol sadece bir dizedir. İstediğin gibi hesaplayabilirsin. Varsayılan olarak AzureWebJobsSdkStorage uygulama ayarı tarafından belirtilen varsayılan depolama hesabı kullanılır. Parametre türünüzü Binder (IBinder'ın aksine) olarak değiştirerek kullanılan depolama hesabını geçersiz kılabilirsiniz. Bir dizi özniteliği alan bir aşırı yük var. Daha sonra bir StorageAccountAttribute ile gerçek bağlama özniteliğini birlikte geçirebilirsiniz. Bağlama niteliğinin önce gelmesi gerekiyor. Yukarıdaki ayrıntıları ekleyeceğim. – mathewc

3

bu yorumlarına yanı sıra, bir diğer mesajları tüm bilgileri konsolide ve gerçek bir dünya senaryosu ile Binder nasıl kullanılacağını gösteren bir blog post oluşturdunuz. @mathewc sayesinde bu mümkün oldu.

+0

Güzel blog gönderisi :) – mathewc