2016-09-01 6 views
0

ServiceBusTriggerで装飾されたパラメータの逆シリアル化プロセスにプラグインすることが可能かどうかを確認したいと思いますか?ServiceBusTrigger POCO逆シリアル化

は、私がどのように見えるの機能を持っていると言う:

public static void HandleMessage([ServiceBusTrigger("myqueue")] MyCustomType myCustomType) { } 

はどのようにして、デシリアライゼーションを引き継ぐに行きますか?私は、IArgumentBindingProviderとIArgumentBindingという概念があることを知っていますが、ServiceBusTriggerがこれらの概念をサポートしているようには見えません。

GetBody <ストリーム>()を使用して逆シリアル化することができますが、私はServiceBusTriggerのパイプラインに接続できるかどうかを知りたいと思います。 SDKを見れば、ServiceBusTriggerにはハードコーディングされたIQueueArgumentBindingProvidersのリストがあり、自分自身を追加することはできません。

は、そうでない場合ServiceBusConfigurationはあなたが傍受することができますMessagingProviderプロパティを公開し

+0

あなたはあなたのユースケースをしてください説明することができ、達成しようとするのですか? – Thomas

答えて

0

ありServiceBusTriggerパイプライン:

private static void Main() 
{ 
    var sbConfig = new ServiceBusConfiguration() 
    { 
     MessagingProvider = // you implemetation of the MessagingProvider class goes here !!! 
    }; 
    var config = new JobHostConfiguration(); 
    config.UseServiceBus(sbConfig); 
    new JobHost(config).RunAndBlock(); 
} 

ここでは単純ですMessagingProvider実装の電子スケルトン:

public sealed class MyMessagingProvider : MessagingProvider 
{ 
    private readonly ServiceBusConfiguration _config; 

    public MyMessagingProvider(ServiceBusConfiguration config) 
     : base(config) 
    { 
     _config = config; 
    } 

    public override MessageProcessor CreateMessageProcessor(string entityPath) 
    { 
     return new MyMessageProcessor(_config.MessageOptions); 
    } 

    private class MyMessageProcessor : MessageProcessor 
    { 
     public MyMessageProcessor(OnMessageOptions messageOptions) 
      : base(messageOptions) 
     { 
     } 


     public override Task<bool> BeginProcessingMessageAsync(BrokeredMessage message, CancellationToken cancellationToken) 
     { 
      // Intercept the message before the execution of the triggerred function 
      return base.BeginProcessingMessageAsync(message, cancellationToken); 
     } 

     public override Task CompleteProcessingMessageAsync(BrokeredMessage message, FunctionResult result, CancellationToken cancellationToken) 
     { 
      // Intercept the message after the execution of the triggerred function and before being completed 
      return base.CompleteProcessingMessageAsync(message, result, cancellationToken); 
     } 
    } 
} 

だから、あなたが主な機能だが、今のようになります。

private static void Main() 
{ 
    var sbConfig = new ServiceBusConfiguration(); 
    sbConfig.MessagingProvider = new MyMessagingProvider(sbConfig); 
    var config = new JobHostConfiguration(); 
    config.UseServiceBus(sbConfig); 
    new JobHost(config).RunAndBlock(); 
} 
+0

返信いただきありがとうございますが、メッセージプロセッサは、メッセージの処理前後で処理を行うことができます。私がやろうとしているのは、バリュー・バインディング・プロセスにプラグインすることです。たとえば、BrokeredMessageのデシリアライズを自分のカスタムタイプに拡張して、次のようなWebジョブ機能を持たせたいと考えています。 – Carlos

+0

@Carlos、あなたの機能がどのように表示されるかはわかりません。 – Thomas

+0

返信ありがとうプロセッサーでは、メッセージの処理前後で処理を行うことができます。私がやろうとしているのは、バリュー・バインディング・プロセスにプラグインすることです。たとえば、BrokeredMessageの非直列化をカスタムタイプに拡張して、次のようなWebジョブ機能を持たせたいと考えています。 public void JobFunction([ServiceBusTrigger(...)] MyType myType) (カスタムタイプの場合、プロパティ辞書がマップされていない)バニラの逆シリアル化をプラグインして、BrokeredMessage.Propertiesディクショナリの値をMyTypeにコピーできるようにします。 – Carlos