>

저는 새로운 푸른 기능입니다. Azure Portal에서 Azure http 트리거 기능을 만들었습니다. servicebus 주제에 메시지를 출력하고 싶습니다.

포털에있는 httptrigger 함수는 다음과 같습니다.

#load "..\sharedcode\DeleteCommandRequest.csx"
#r "Newtonsoft.Json"
#r "Microsoft.ServiceBus"
using System.Net;
using Newtonsoft.Json;
using Microsoft.ServiceBus
using Microsoft.ServiceBus.Messaging;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
    TraceWriter log,
    ServiceBus outputSbMsg)
{
    log.Info("C# HTTP trigger function processed a request.");
    DeleteCommandRequest request = await req.Content.ReadAsAsync<DeleteCommandRequest>();
    log.Info($"Delete command recevied: {request.SagaId} {request.Action} {request.RequestId}");
    var message = new BrokeredMessage(JsonConvert.SerializeObject(request));
    outputSbMsg.send(message);
    return request == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass the correct request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + JsonConvert.SerializeObject(request));
}

다음 오류가 발생했습니다 :

error CS0246: The type or namespace name 'ServiceBus' could not be found (are you missing a using directive or an assembly reference?)

httptrigger에서 brokeredmessage를 servicebus 주제로 출력하는 방법을 도와 주시겠습니까?

또한 VS2017 사전 컴파일 된 푸른 기능에서 시도했습니다 :

[FunctionName("DeleteCase")]
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]
    HttpRequestMessage req,
    [ServiceBus("cqrs-commands", EntityType = EntityType.Topic)]
    IAsyncCollector<BrokeredMessage> messageTopic,
    TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    DeleteCommandRequest delRequest = await req.Content.ReadAsAsync<DeleteCommandRequest>();
    log.Info($"Delete request received: {delRequest.SagaId} {delRequest.Action} {delRequest.RequestId}");
    var brokeredMessage = new BrokeredMessage(delRequest);
    await messageTopic.AddAsync(brokeredMessage);
    return req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(delRequest));
}

그러나 위 코드를 사용하면 http 트리거 기능이 주제에 브로커 메시지를 보내지 않습니다. 아무도 내가 여기서 뭘 잘못하고 있는지 알려주시겠습니까?

감사합니다


  • 답변 # 1

    다음은 ServiceBus 출력 바인딩을위한 확장 된 httptrigger 템플릿입니다.

    #r "Newtonsoft.Json"
    #r "Microsoft.ServiceBus"
    #r "System.Runtime.Serialization"
    using System.Text;
    using System.Runtime.Serialization;
    using System.Net;
    using Newtonsoft.Json;
    using Microsoft.ServiceBus;
    using Microsoft.ServiceBus.Messaging;
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, IAsyncCollector<BrokeredMessage> collector, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
        // parse query parameter
        string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;
        if (name == null)
        {
            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();
            name = data?.name;
        }
        // brokered message
        var payload = JsonConvert.SerializeObject(new { id = 1234, name = "abcd" });
        var bm = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(payload)), true) { ContentType = "application/json", Label = "Hello", MessageId = "1234567890" };
        await collector.AddAsync(bm);
        return name == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
            : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
    }
    
    

    및 function.json 파일 :

       {
      "bindings": [
        {
          "authLevel": "function",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "type": "serviceBus",
          "connection": "{yourconnection}",
          "name": "collector",
          "topicName": "{yourtopic}",
          "accessRights": "Manage",
          "direction": "out"
        }
      ],
      "disabled": false
    }
    
    

  • 이전 html - 다른 div 위에 라인 테이블에 드롭 다운 표시
  • 다음 nlp - 어떤 RASA NLU 또는 SNIPS NLU 중 가장 좋은가요?