GithubHelp home page GithubHelp logo

azure / azure-functions-dapr-extension Goto Github PK

View Code? Open in Web Editor NEW
95.0 19.0 33.0 725 KB

Extension for interacting with Dapr APIs from an Azure Function

License: MIT License

C# 94.27% Makefile 0.10% Java 2.78% Bicep 2.08% Dockerfile 0.41% JavaScript 0.36%

azure-functions-dapr-extension's Introduction

DAPR Extension for Azure Functions - Public Preview

Build and Test License: MIT codecov

Azure Functions is a serverless computing framework that simplifies the development of event-driven applications, while Dapr is a microservices framework that provides a set of building blocks for building distributed systems.

The Azure Functions programming model uses a declarative approach, where developers define the triggers and bindings for their functions in a configuration file or through the Azure portal. The Dapr programming model is more flexible, allowing developers to use any programming language, framework, or infrastructure of their choice.

Converging the strengths of both programming models, Azure Functions Dapr extension allows you to easily interact with the Dapr APIs from an Azure Function using triggers and bindings. This extension works with Azure Functions on Azure Container Apps, Local Dev & Azure Kubernetes. This extension provides integration to Dapr state, secrets, pub-sub, and bindings directly in your function code. Extension is modularized into 6 components.

Extension components:

  • Extension runtime: The extension includes a runtime that initializes the Dapr and sets up the necessary environment variables and configuration. It also provides a set of APIs and bindings that the function can use to interact with Dapr.

  • Configuration: The extension requires configuration settings to be set up properly to interact with Dapr's APIs. These settings include the Dapr HTTP endpoint, Dapr app ID, and Dapr API token.

  • Trigger bindings: The extension provides trigger bindings that enable functions to be triggered by Dapr events such as service-to-service requests and pub/sub events. This allows functions to react to events and perform actions based on them.

  • Input bindings: The extension provides input bindings that allow functions to receive data from Dapr, such as state values or input from external systems. This allows functions to consume data from other systems and use it in their processing.

  • Output bindings: The extension provides output bindings that allow functions to send data to Dapr or external systems, such as publishing events or sending HTTP requests. This allows functions to produce output that can be consumed by other systems.

  • Dapr API integration: The Dapr extension for functions integrates with Dapr's HTTP API to perform operations such as saving state, publishing events, and invoking service-to-service requests. This integration is handled by the Dapr implicit. Extension provides both HTTP client & HTTP Server (Kestrel) to interact with Dapr's APIs. These are built on top of the Dapr SDK and provide a consistent interface for making HTTP requests.

This extension supports all the languages that Azure Function supports :

Quickstarts

You can easily deploy Azure Functions with the Dapr extension in Azure Container Apps (ACA), self-hosted mode or Kubernetes. Follow the below quickstarts guides to deploy Azure Functions with Dapr Extension.

If you are new to Azure Functions, it's recommended to try out an Azure Function's quickstart first to understand the basics of the programming model.

You can run through a quickstart of developing JavaScript Azure Functions that leverage Dapr following this tutorial

Function Triggers

Azure Function triggers cause a function to run. A trigger defines how a function is invoked and a function must have exactly one trigger. Triggers have associated data, which is often provided as the payload of the function.

Trigger Type Description Code Samples
daprBindingTrigger Trigger on a Dapr input binding C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprServiceInvocationTrigger Trigger on a Dapr service invocation C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprTopicTrigger Trigger on a Dapr topic subscription C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell

Function Bindings

Azure Function bindings is a way of declaratively connecting another resource to the function; bindings may be connected as Input Bindings, Output Bindings, or both. Data from bindings is provided to the function as parameters.

Binding Type Direction Description Code Samples
daprState Input Pull in Dapr state for an execution C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprSecret Input Pull in Dapr secrets for an execution C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprState Output Save a value to Dapr state C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprInvoke Output Invoke another Dapr app C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprPublish Output Publish a message to a Dapr topic C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell
daprBinding Output Send a value to a Dapr output binding C# Isolated, C# Inproc, JavaScript, Python V2, Python V1, Java, PowerShell

Dapr ports and listeners

When you are triggering a function from Dapr, the extension will expose port 3001 automatically to listen to incoming requests from the Dapr sidecar. This port is configurable, you can provide any other available port in your app settings for DAPR_APP_PORT env variable instead of 3001.

IMPORTANT: Port 3001 will only be exposed and listened if a Dapr trigger is defined in the function app. When using Dapr the sidecar will wait to receive a response from the defined port before completing instantiation. This means it is important to NOT define the dapr.io/app-port annotation or --app-port unless you have a trigger. Doing so may lock your application from the Dapr sidecar. Port 3001 does not need to be exposed or defined if only using input and output bindings.

By default, when Azure Functions tries to communicate with Dapr it will call Dapr over the port resolved from the environment variable DAPR_HTTP_PORT. If that is null, it will default to port 3500.

You can override the Dapr address used by input and output bindings by setting the DaprAddress property in the function.json for the binding (or the attribute). By default it will use http://localhost:{DAPR_HTTP_PORT}.

The function app will still expose another port and endpoint for things like HTTP triggers (locally this defaults to 7071, in a container it defaults to 80).

Known Issues

  • By Design: In isolated mode, there's no support for using POCO (Plain Old CLR Object) models in output bindings and triggers. All payloads must be sent as JSON data, and these data should be treated as the JsonElement type in Azure Functions. You can refer to the input bindings, output bindings, and triggers sections to understand the data format and the necessary properties for each type of binding.

azure-functions-dapr-extension's People

Contributors

aaroncrawfis avatar amanbha avatar ashiquemd avatar cgillum avatar dependabot[bot] avatar jeffhollan avatar kaiwalter avatar lcartel-ms avatar mchmarny avatar microsoft-github-policy-service[bot] avatar paulyuk avatar rabollin avatar rynowak avatar shubham1172 avatar vinayada1 avatar wenhzha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

azure-functions-dapr-extension's Issues

Requesting Feedback about DAPR extension for Functions

Hello everyone - We have been working on adding few more abilities to this DAPR extension for functions and release the next version of it in a month time. We would like to seek your feedback on the extension about immediate features you would like to see, also any major challenges or issues with you have been facing with the extension if it was already tried by you. If you have any inputs that you would like to share, please post it as an issue in this repo.

Unable to use dapr triggers and cast to string in non-.NET

If my function.json doesn't explicitly ask for datatype: binary it throws a cast exception. Ideally it could convert to string. In this case it was a storage queue input binding that was a base64 string:

Exception while executing function: Functions.InputBindingTrigger. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'triggerData'. Newtonsoft.Json: Unexpected character encountered while parsing value: Y. Path '', line 0, position 0.

DaprBindingTrigger not triggering when running dapr locally

I have been developing azure function (tried both isolated and in process model) which utilizes the Dapr trigger binding, set to connect to Azure Service Bus. Azure function is supposed to get invoked with new message landing in the queue. When testing the setup locally I noticed very strange behavior. If I run the app using dapr run command, function doesn't get invoked. However if I start functions project via VS Code and only then start dapr, the trigger gets invoked on the already running function instance

This is my dapr.yaml file which I reference in command dapr run -f . -H 3500

version: 1
common:
  resourcesPath: ./components
apps:
  - appDirPath: ./functions-be
    appID: functionapp
    command: ["func", "host", "start"]
    appPort: 3001
    daprHTTPPort: 3500
    logLevel: ''
    enableApiLogging: true    ```

And this is my service bus component:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: servicebus
spec:
type: bindings.azure.servicebusqueues
version: v1
metadata:

  • name: connectionString # Required when not using Azure Authentication.
    value: "Endpoint=sb://.servicebus.windows.net/;SharedAccessKeyName=policy1;SharedAccessKey=;EntityPath=queue1"
  • name: queueName
    value: "queue1"

Function can publish to topic but not subscribe

I'm currently working on an C# Azure Function. It has to publish a message to a message queue. This works fine. However a different trigger in the same service should subscribe to it. This never happens:

Dapr log:
06-16T18:38:49.843138403Z" level=debug msg="user app did not subscribe to any topic" app_id=orderservice instance=50fa6e88108d scope=dapr.runtime type=log ver=1.0.0 time="2022-06-16T18:38:49.843169623Z" level=debug msg="app responded with subscriptions []" app_id=orderservice instance=50fa6e88108d scope=dapr.runtime type=log ver=1.0.0

I have confirmed that the publish does work:
image

The function that publishes and works:

 [FunctionName("PostOrder")]
    public void RunFromHttpAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
        [DaprPublish(PubSubName = "%PubSubName%", Topic = "createorder")] out object pubEvent
        , ILogger log)
    {
        log.LogInformation("Order posted");
        pubEvent = new DaprPubSubEvent("test");
    }

The code that should sub:

  [FunctionName("CreateOrderCommandHandler")]
        public async Task<IActionResult> Run(
            [DaprTopicTrigger("pubsub", Topic = "createorder")] CloudEvent  message, ILogger log)
        {
            log.LogInformation("Topic triggered with: {FF}",message);

            //var result = await _pipelineExecutor.ExecutePipelineCommand<CreateOrderCommand, OrderResponse>(message);

            return new OkObjectResult(message);
        }

The docker compose that launches the service:

  redis:
    image: redis:alpine
    ports:
      - "5379:6379"
  orderservice:
    image: ${DOCKER_REGISTRY-}orderservice
    container_name: 'orderservice'
    depends_on:
      - customerservice
      - itemservice
    ports:
      - "31587:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT}
      - PubSubName=pubsub
      - OrderServiceConnectionString=Server=mssql,1433;database=OrderService;User ID=SA;Password=Password!;Trusted_Connection=False;
    build:
      context: .
      dockerfile: OrderService/Dockerfile
      args:
        BUILD_CONFIGURATION: ${BUILD_CONFIGURATION}

  orderservice-dapr:
    image: "daprio/daprd:1.0.0" 
    command: [
      "./daprd",
      "-app-id", "orderservice", 
      "-app-port", "31587" ,
      "-log-level", "debug",
      "-components-path", "/components",
      "-placement-host-address", "placement:50006",
    ]
```


The dapr component for the redis stream:

```yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: pubsub
spec:

  type: pubsub.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis:6379
  - name: redisPassword
    value: ""
scopes:
- orderservice
- itemservice
```

Is it possible to run the Azure Functions Dapr Extension with a Custom Handler?

I am experimenting with an odd scenario. Basically I want to subscribe to a Dapr Topic from a Go function inside Azure Functions.

For the Go function, I was able to register a Custom Handler that can handle the HTTP Requests:

func orderHandler(w http.ResponseWriter, r *http.Request) {
	log.Println("Handler invoked from an event")

	var invokeRequest InvokeRequest

	d := json.NewDecoder(r.Body)
	if err := d.Decode(&invokeRequest); err != nil {
		log.Fatal("Error while decoding the Body")
		return
	}

	log.Println(invokeRequest)
}

And inside the main function, I have the code to register the endpoints

func main() {
	customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
	if !exists {
		customHandlerPort = "8080"
	}
	mux := http.NewServeMux()
	mux.HandleFunc("/orders", orderHandler)
	fmt.Println("Go server Listening on: ", customHandlerPort)
	log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
}

I added the customHandler property inside the host.json file:

"customHandler": {
    "description": {
      "defaultExecutablePath": "handler.exe",
      "workingDirectory": "",
      "arguments": []
    }
  }

And created Function called DaprEventTrigger with the following function.json:

{
  "bindings": [
    {
      "name": "eventTrigger",
      "type": "daprTopicTrigger",
      "pubsubname": "orderpubsub",
      "topic": "orders",
      "direction": "in"
    }
  ]
}

To run this I am running the following cmd:

dapr run --app-id functionA --resources-path ./components/ --app-port 3001 -- func host start

Inside the components folder I only have one file called pubsub.yaml, which contains the Redis Component.

Right after the initialization I get this error:

time="2024-03-06T10:13:24.3482556-03:00" level=error msg="app returned http status code 500 from subscription endpoint" app_id=functionA instance= scope=dapr.runtime.processor.pubsub type=log ver=1.12.5

I suppose there's something going on with the Subscription Endpoint, which is falling with 500 HTTP Error in Dapr initialization and also when I try to call localhost:3001/dapr/subscribe

Is there a way to run a Custom Handler with Dapr Topic Subscription in Azure Functions?

I have also tried:

  • Creating a dapr/subscribe and /orders HTTP Trigger.

Invoking API Rest (dotnet) from Azure Function using [DaprInvoke(...)] locally

I'm trying to invoke a REST API (dotnet 3.1 or 5.0) from Azure function using [DaperInvoke(...)], but I can't do it, it not possible because this error: "System.Private.CoreLib: Exception while executing function: EmailSender. Microsoft.Azure.WebJobs.Host: Error while handling parameter invoke after function returned:. Dapr.AzureFunctions.Extension: No meaningful error message is returned"

Here more detail to reproduce it:

WebApp1. Is just a dotnet Web API:

[ApiController]
[Route("[controller]")]
public class OneNameController : ControllerBase
{
    private readonly ILogger<OneNameController> _logger;

    public OneNameController(ILogger<OneNameController> logger)
    {
        _logger = logger;
    }

    [HttpPost]
    public void Post([FromBody] string name)
    {
        _logger.LogInformation($"Service WebApp1 called for '{name}'");            
    }
}

Azure Function:

[FunctionName("EmailSender")]
public static async Task<IActionResult> Run(
    [DaprTopicTrigger("pubsub", Topic = "greatings")] CloudEvent @event,
    [DaprInvoke(AppId = "webapp1", MethodName = "OneName", HttpVerb = "post")] IAsyncCollector<InvokeMethodParameters> invoke,
    ILogger log)
{
    log.LogInformation($"Init TestInvoker...");

    var msg = $"This is a sample for user '{@event.Data}', bla, bla....";
    var content = new InvokeMethodParameters()
    {
        Body = msg
    };
    await invoke.AddAsync(content);

    return new OkResult();
}

Running API Rest: dapr.exe run --app-id webapp1 --app-port 5001 --dapr-http-port 3502 --app-ssl dotnet run -- -urls=https://localhost:5001/

Running Function: dapr run --app-id hello-functions --dapr-http-port 3501 -p 3001 --components-path .\dapr\components -- func host start

Once WebApi is running, I lauch Function, and put a message in the service bus, when de Azure Function execute the code, this error comming up: "System.Private.CoreLib: Exception while executing function: EmailSender. Microsoft.Azure.WebJobs.Host: Error while handling parameter invoke after function returned:. Dapr.AzureFunctions.Extension: No meaningful error message is returned".

Note: When I use dapr invoke --app-id webapp1 --method OneName -v post --data '\"juanlu\"' in command line to invoke WebApp1, everything works properly.

Migrate Functions Extension back to `github.com/Azure` org

Microsoft will continue development of the Azure Functions extension and offer product support for that. To do so we want to transfer it to the Github.com/Azure org where it will remain public and can receive OSS contributions, but under Microsoft control.

This is a request to make @berndverst and admin of this repo to initiate the transfer to the github.com/Azure org.

Thanks!

Documentation inconsistencies

  1. fix commands for linux/macos

dapr run --app-id functionapp --app-port 3001 --dapr-http-port 3501 --components-path ..\components\ -- func host start ==>
dapr run --app-id functionapp --app-port 3001 --dapr-http-port 3501 --components-path ../components/ -- func host start

  1. Dapr Bindings Sample - broken link in section: https://github.com/dapr/azure-functions-extension/tree/master/samples/dotnet-azurefunction#3-dapr-binding

  2. python extension - == APP == Can't determine project language from files. Please use one of [--csharp, --javascript, --typescript, --java, --python, --powershell] ==> local.settings.json file is missing which determines the language

  3. Cleanup kubernetes instructions

Java library for bindings doesn't exist

Java uses an attribute model similar to .NET, but the library is created here: https://github.com/azure/azure-functions-java-library

There isn't a great way using that library to do a flexible custom trigger / binding. It's very limited today. This is the closest I can get:

            @CustomBinding(name = "triggerData", direction = "in", type = "daprBindingTrigger") byte[] triggerData,
            final ExecutionContext context) throws UnsupportedEncodingException {
        context.getLogger().info("Java HTTP trigger processed a request.");

But it doesn't let me define other function.json properties I need like BindingName - so fully blocked for now

Issue while saving data as object type doesn't save it correctly

Issue: while saving data as object type doesn't save it correctly. This could be reproduced by running the InProc sample functions (CreateNewOrder and RetrieveOrder azure functions samples)

Expected behavior

Same data should be saved in dapr state and should receive same data while retrieving it using DaprState Input binding.

Data to save: '{ "orderId": "41" }'

Actual behavior

Whole data is not getting saved in dapr state instead it save only below data.

{"orderId":[]}

== APP == [2023-04-17T14:50:22.804Z] Executing 'CreateNewOrder' (Reason='(null)', Id=52db531a-f0fa-485b-b9b3-e16ab6ea7992)
== APP == [2023-04-17T14:50:25.370Z] C# function processed a CreateNewOrder request from the Dapr Runtime.
== APP == [2023-04-17T15:02:43.518Z] Executed 'CreateNewOrder' (Succeeded, Id=52db531a-f0fa-485b-b9b3-e16ab6ea7992, Duration=742337ms)
== APP == [2023-04-17T15:03:02.890Z] Executing 'RetrieveOrder' (Reason='(null)', Id=11f0233a-a600-468e-b2cf-8f5ab8c1f851)
== APP == [2023-04-17T15:03:04.267Z] C# function processed a RetrieveOrder request from the Dapr Runtime.
== APP == [2023-04-17T15:03:04.268Z] {"orderId":[]}
== APP == [2023-04-17T15:03:04.269Z] Executed 'RetrieveOrder' (Succeeded, Id=11f0233a-a600-468e-b2cf-8f5ab8c1f851, Duration=5095ms)

Steps to reproduce:

  1. Create a function with dapr state output binding with data of type object as shown below.

     [FunctionName("CreateNewOrder")]
     public static void Run(
         [DaprServiceInvocationTrigger] JObject payload,
         [DaprState("%StateStoreName%", Key = "order")] out object order,
         ILogger log)
     {
         log.LogInformation("C# function processed a CreateNewOrder request from the Dapr Runtime.");
    
         order = payload["data"];
     }
    
  2. Create a function to read the same data

     [FunctionName("RetrieveOrder")]
     public static void Run(
         [DaprServiceInvocationTrigger] object args,
         [DaprState("%StateStoreName%", Key = "order")] string data,
         ILogger log)
     {
         log.LogInformation("C# function processed a RetrieveOrder request from the Dapr Runtime.");
    
         // print the fetched state value
         log.LogInformation(data);
     }
    

Error 'Microsoft.Azure.WebJobs.Extensions.Dapr: A 'value' parameter is required for save-state operations' in dotnet-isolated

I recoded samples/dotnet-isolated-azurefunction/OutputBinding/StateOutputBinding.cs in my own sample https://github.com/KaiWalter/azure-functions-dapr-experimental/blob/main/dotnet-cs-v4/PostState.cs like

    public static class PostState
    {
        [Function(nameof(PostState))]
        [DaprStateOutput("statestore", Key = "{key}")]
        public static string Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "state/{key}")] HttpRequestData req,
            FunctionContext functionContext)
        {
            var log = functionContext.GetLogger(nameof(PostState));

            string requestBody = new StreamReader(req.Body).ReadToEnd();

            log.LogInformation(requestBody);

            return requestBody;
        }
    }

after already struggling with #151 and implementing the suggested workaround, independent whether I start with

dapr run --app-id statefunc --dapr-http-port 3501 --resources-path ./components -- func host start

or

dapr run --app-id statefunc --dapr-http-port 3501 --resources-path ./components -- func start

I get this error

== APP == Functions:
== APP ==
== APP ==       GetState: [GET] http://localhost:7071/api/state/{key}
== APP ==
== APP ==       PostState: [POST] http://localhost:7071/api/state/{key}
== APP ==
== APP == For detailed output, run func with --verbose flag.
== APP == [2023-10-02T12:35:06.748Z] Worker process started and initialized.
== APP == [2023-10-02T12:35:13.387Z] Executing 'Functions.PostState' (Reason='This function was programmatically called via the host APIs.', Id=8926b827-f497-41e0-9f2a-66f20f64053f)
== APP == [2023-10-02T12:35:13.534Z] {"message": "Hello World"}
== APP == [2023-10-02T12:35:13.623Z] Executed 'Functions.PostState' (Failed, Id=8926b827-f497-41e0-9f2a-66f20f64053f, Duration=263ms)
== APP == [2023-10-02T12:35:13.623Z] System.Private.CoreLib: Exception while executing function: Functions.PostState. Microsoft.Azure.WebJobs.Extensions.Dapr: A 'value' parameter is required for save-state operations. (Parameter 'parametersJson').

Retrieve from state store could support JSON-serializable datatype

Currently, to save an object to the state store, it looks like the following is supported:

        [FunctionName(Constants.CreateNewOrder)]
        public void Run(
            [DaprServiceInvocationTrigger] OrderItem orderItem,
            [DaprState("%StateStoreName%", Key = "{orderItem.id}")] out OrderItem order)
        {
            order = orderItem;
        }

Where OrderItem is automatically desearlised by the functions runtime, and added to the store. The following also looks like it is supported:

        [FunctionName(Constants.CreateNewOrder)]
        public async Task Run(
            [DaprServiceInvocationTrigger] OrderItem orderItem,
            [DaprState("%StateStoreName%", Key = "{orderItem.id}")] IAsyncCollector<OrderItem> store)
        {
            await store.AddAsync(orderItem);
        }

It would be great if this same style was supported for a retrieve. So, the following would be ideal:

        [FunctionName(Constants.RetrieveOrder)]
        public ActionResult<OrderItem> Run(
            [DaprServiceInvocationTrigger] string stateKey,
            [DaprState("%StateStoreName%", Key = "{stateKey}")] OrderItem item)
        {
            return item;
        }

Currently, it looks like this is not supported, because when calling the method, the following is reported back:

== APP == [07/09/2020 13:58:28] Executed 'RetrieveOrder' (Failed, Id=a571dbc7-c326-4eb1-ab15-20a56d0c1e57)

== APP == [07/09/2020 13:58:28] System.Private.CoreLib: Exception while executing function: RetrieveOrder. Anonymously Hosted DynamicMethods Assembly: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'IngestFunction.Model.OrderItem'.

Let me know if you think this is a good idea and if so, happy to contribute if I can.

Samples

Samples will need to be created that demonstrate using the Dapr bindings and triggers in a function app. Ideally they would showcase the programming model for all supported features and a few key languages (C#, JavaScript, Python, etc.)

Setup required secrets for GitHub actions

The following secrets should be created

Name Description
DOCKER_REGISTRY_ID Username for Docker registry, required for uploading sample image
DOCKER_REGISTRY_PASS Password for Docker registry, required for uploading sample image
DOCKER_REGISTRY URL to Docker registry, required for uploading sample image
GITHUB_TOKEN Token to publish binaries to GitHub during release
NUGETORG_DAPR_API_KEY API key to publish package to NuGet

[QUESTION] DaprState key convention when invoking a method

Using the sample from here:

https://github.com/dapr/azure-functions-extension/blob/caa615345bf9c77225908ab5a77cd9dc282cbf43/samples/dotnet-azurefunction/RetrieveOrder.cs#L20

Is it possible to specify the key when calling the method?

Also, using this example:

https://github.com/dapr/azure-functions-extension/blob/caa615345bf9c77225908ab5a77cd9dc282cbf43/samples/dotnet-azurefunction/CreateNewOrder.cs#L21

The key that is saved to the state store uses order.

I can see that you can do it with a http trigger:

https://github.com/dapr/azure-functions-extension/blob/caa615345bf9c77225908ab5a77cd9dc282cbf43/samples/dotnet-azurefunction/StateInputBinding.cs#L19

But not with the [DaprServiceInvocationTrigger].

You can see from the screenshot that the bottom two rows call the .net core client Dapr.AspNetCore and they do use the key, but the function just uses order:

image

Is this a limitation at the moment?

Function not triggered

Hi,

I am trying to build a POC with Azure Container Apps (abstraction on top of AKS, KEDA, Dapr) which is actually an Async Request-Reply pattern implementation involving:

  • One REST API component, ASP.NET core 6 Web API using Dapr pub/sub (based on Azure Service Bus) and Dapr state store (based on ComosDB) components
  • One message-based background processing component, Azure Function, .net 6 for the function app, using Dapr pub/sub (based on Azure Service Bus) with Dapr Azure Function Extensions and Dapr state store (based on ComosDB) components

The two components are correctly built, containerized, pushed to ACR and successfully deployed as two separate Azure Container Apps in the same Azure Container Apps environment. (Under the hood that results into two separate pods, each running the component's main container plus the Dapr sidecar, in the same AKS cluster)

However the function of the background processing component is never triggered:

  • I have configured appPort:3001 in the Dapr configuration section of the ARM template for the background process Azure Container App as per documentation

  • I can see the background process container successfully starting as I can see some technical logs from the container and daprd in the Log Analytics Workspace that is linked to the Azure Container App

  • The Azure Service Bus topic and subscription are correctly created after I deploy the Azure Container App for the background process with Dapr configuration

  • I can see the active messages on the topic subscription after publishing from the API component. However it appears the messages are never consumed by the Dapr sidecar and delivered to my function. Example (peek):
    {"specversion":"1.0","source":"weather-forecast-api","pubsubname":"weather-forecast-api-pub-sub","topic":"weather-forecast-request","traceid":"00-00000000000000000000000000000000-0000000000000000-00","data":{"date":"2022-02-01T00:00:00"},"id":"3998d01e-3d70-4970-b2f3-a1903d32d2e6","datacontenttype":"application/json","type":"com.dapr.event.sent"}

  • My function signature and starting logs:

[FunctionName("ProcessWeatherForecastRequest")]
        public async Task Run([DaprTopicTrigger("weather-forecast-pub-sub", Topic = "weather-forecast-request")] CloudEvent evt,ILogger log)
        {
            log.LogInformation($"{nameof(ProcessWeatherForecastRequest)} function triggered.");
            log.LogInformation("Simulating 30 seconds latency for background processing...");
...
  • I never see the starting logs and the messages are not being consumed from the topic subscription...

DaprPublishOutput not sending message

I've developed a Durable Function in Isolated worker. DaprPublishOutput doesn't seem to work for me. It's not generating any errors, but it's failing to send out messages.

[DaprPublishOutput(PubSubName = "%PubSubName%", Topic = "{topicName}")]

I've conducted tests with the same setup using In-process and the Dapr client with PublishEvent, and both of them are functioning correctly as well.

Azure Function Extension to show warning message if app_port is given for non-trigger dapr functions

Problem: The console message doesn't clearly inform the user when the app_port is set, but there's no listener (app) on that port. This situation occurs when using a function app with Dapr input/output bindings and without Dapr triggers, specifying an app_port with Dapr. Dapr keeps attempting to connect to the app on the specified port, even if there's no app running on that port.

Expectation: When the user provides an app_port to Dapr, and there's no app running on that port, there should be a log message indicating that Dapr is trying to communicate on that port, but no app is available.

Message in console:

the current message is below:time="2023-09-26T10:24:23.9718899+05:30" level=info msg="internal gRPC server is running on port 65226" app_id=funcorderapp instance= scope=dapr.runtime type=log ver=1.10.6 time="2023-09-26T10:24:23.9718899+05:30" level=info msg="application protocol: http. waiting on port 3003. This will block until the app is listening on that port." app_id=funcname instance= scope=dapr.runtime type=log ver=1.10.6

Here is the sample project: https://github.com/ASHIQUEMD/azure-func-isolated-dapr
Dapr cli command to run the app: dapr run --app-id functionapp --app-port 3001 --dapr-http-port 3501 -- func host start

Actor input/output binding support

Functions should be able to send one-way messages to actors using output bindings and also fetch the state of an actor using input bindings.

Document behavior when no triggers are configured.

When deploying the sidecar to K8s during initiatlization it tries to connect to port 3001 even if you aren't using the trigger. So I had a function with a dapr output binding that wasn't working because port 3001 wasn't alive. I mitigated by adding a dapr trigger to the same app, but ideally we'd spin up a listener on 3001 if any dapr bindings were used

Azure Function using Dapr Topic Trigger (or Dapr output binding) Won't Build

When trying to create an azure function project in Visual Studio that uses the Dapr Topic trigger (or Dapr output binding), the project cannot be built due to reference of a nuget pkg with version greater than or equal to 99.99.99 in a temporary project that gets built automatically. Since the nuget pkg doesn't exist, the build fails. I am aware of the workaround mentioned here: https://github.com/Azure/azure-functions-dapr-extension/blob/master/troubleshooting-guide.md#unable-to-find-package-microsoftazurewebjobsextensionsdapr-with-version-999999

However, since we're looking to use this trigger in a production environment, this workaround isn't suitable for us. I had opened a support ticket through Microsoft already and I was advised to open an issue here as well so the progress on fixing it can be tracked.

System info:
Microsoft Visual Studio Enterprise 2022
Version 17.8.6
VisualStudio.17.Release/17.8.6+34525.116
Microsoft .NET Framework
Version 4.8.09037

Installed Version: Enterprise

ADL Tools Service Provider 1.0
This package contains services used by Data Lake tools

ASA Service Provider 1.0

ASP.NET and Web Tools 17.8.358.6298
ASP.NET and Web Tools

Azure App Service Tools v3.0.0 17.8.358.6298
Azure App Service Tools v3.0.0

Azure Data Lake Tools for Visual Studio 2.6.5000.0
Microsoft Azure Data Lake Tools for Visual Studio

Azure Functions and Web Jobs Tools 17.8.358.6298
Azure Functions and Web Jobs Tools

Azure Stream Analytics Tools for Visual Studio 2.6.5000.0
Microsoft Azure Stream Analytics Tools for Visual Studio

C# Tools 4.8.0-7.23572.1+7b75981cf3bd520b86ec4ed00ec156c8bc48e4eb
C# components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.

Common Azure Tools 1.10
Provides common services for use by Azure Mobile Services and Microsoft Azure Tools.

Microsoft Azure Hive Query Language Service 2.6.5000.0
Language service for Hive query

Microsoft Azure Stream Analytics Language Service 2.6.5000.0
Language service for Azure Stream Analytics

Microsoft Azure Tools for Visual Studio 2.9
Support for Azure Cloud Services projects

Microsoft JVM Debugger 1.0
Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines

NuGet Package Manager 6.8.0
NuGet Package Manager in Visual Studio. For more information about NuGet, visit https://docs.nuget.org/

Razor (ASP.NET Core) 17.8.3.2405201+d135dd8d2ec1c2fbdee220e8656b308694e17a4b
Provides languages services for ASP.NET Core Razor.

SQL Server Data Tools 17.8.120.1
Microsoft SQL Server Data Tools

ToolWindowHostedEditor 1.0
Hosting json editor into a tool window

TypeScript Tools 17.0.20920.2001
TypeScript Tools for Microsoft Visual Studio

Visual Basic Tools 4.8.0-7.23572.1+7b75981cf3bd520b86ec4ed00ec156c8bc48e4eb
Visual Basic components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.

Visual F# Tools 17.8.0-beta.23475.2+10f956e631a1efc0f7f5e49c626c494cd32b1f50
Microsoft Visual F# Tools

Visual Studio IntelliCode 2.2
AI-assisted development for Visual Studio.

Steps to reproduce:

  1. Create a new Azure Functions project using the โ€œAzure Functionsโ€ project template.
  2. Enter project name/location/solution name
  3. Select .NET 8.0 Isolated (Long Term Support) for โ€œFunctions workerโ€ dropdown, Dapr Topic Trigger for โ€œFunctionโ€ dropdown and ensure boxes are checked for โ€œUse Azurite for runtime storage account (AzureWebJobsStorage)โ€ and โ€œEnable Dockerโ€
  4. Attempt to build solution. Notice that the project build fails with following error: "Unable to find package Microsoft.Azure.WebJobs.Extensions.Dapr with version (>= 99.99.99)

Note this same issue also occurs when you try to use a Dapr output binding.

Unable to find package Microsoft.Azure.WebJobs.Extensions.Dapr with version (>= 99.99.99)

Hi Team,

I'm just doing an experiment with getting Dapr running with a function app Pub/Sub. I don't think Tye supports function apps + Dapr yet, but that's for another day!

When I use version "0.16.0-preview01" my build fails with the below output.

If you want to have a look at what I'm experimenting with the source code is here:

https://github.com/Phiph/dapr-azure-functions

I am building on MacOs 13.6 M2 arm64

Here is the build output for my project:

Build with surface heuristics started at 22:26:43
Use build tool: /usr/local/share/dotnet/sdk/7.0.401/MSBuild.dll
CONSOLE: MSBuild version 17.7.3+8ec440e68 for .NET
CONSOLE: Build started 22/09/2023 22:26:43.
CONSOLE: Project "/var/folders/3v/6jc532m15bq0fjdyx1w379c40000gn/T/Lecihyx.proj" on node 1 (default targets).
CONSOLE: ControllerTarget:
CONSOLE:   Run controller from /Applications/DevTools/Rider.app/Contents/lib/ReSharperHost/JetBrains.Platform.MsBuildTask.v17.dll
0>------- Started building project: FunctionApp
/usr/local/share/dotnet/dotnet exec "/usr/local/share/dotnet/sdk/7.0.401/Roslyn/bincore/csc.dll" /noconfig /unsafe- /checked- /nowarn:1701,1702,1701,1702 /fullpaths /nostdlib+ /errorreport:prompt /warn:7 /define:TRACE;DEBUG;NET;NET7_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER /highentropyva+ /nullable:enable /reference:/Users/phiph/.nuget/packages/azure.core/1.10.0/lib/net5.0/Azure.Core.dll /reference:/Users/phiph/.nuget/packages/google.protobuf/3.23.3/lib/net5.0/Google.Protobuf.dll /reference:/Users/phiph/.nuget/packages/grpc.core.api/2.55.0/lib/netstandard2.1/Grpc.Core.Api.dll /reference:/Users/phiph/.nuget/packages/grpc.net.client/2.55.0/lib/net7.0/Grpc.Net.Client.dll /reference:/Users/phiph/.nuget/packages/grpc.net.clientfactory/2.55.0/lib/net7.0/Grpc.Net.ClientFactory.dll /reference:/Users/phiph/.nuget/packages/grpc.net.common/2.55.0/lib/net7.0/Grpc.Net.Common.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.extensions.dapr.core/0.16.0-preview01/lib/netstandard2.0/Microsoft.Azure.Functions.Extensions.Dapr.Core.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.core/1.15.0/lib/net5.0/Microsoft.Azure.Functions.Worker.Core.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker/1.19.0/lib/net7.0/Microsoft.Azure.Functions.Worker.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.extensions.abstractions/1.3.0/lib/netstandard2.0/Microsoft.Azure.Functions.Worker.Extensions.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.extensions.dapr/0.16.0-preview01/lib/netstandard2.0/Microsoft.Azure.Functions.Worker.Extensions.Dapr.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.extensions.http/3.1.0/lib/netstandard2.0/Microsoft.Azure.Functions.Worker.Extensions.Http.dll /reference:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.grpc/1.14.0/lib/net7.0/Microsoft.Azure.Functions.Worker.Grpc.dll /reference:/Users/phiph/.nuget/packages/microsoft.bcl.asyncinterfaces/1.0.0/ref/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.CSharp.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.binder/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.commandline/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.CommandLine.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.environmentvariables/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.configuration.usersecrets/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.dependencyinjection/5.0.0/lib/net5.0/Microsoft.Extensions.DependencyInjection.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.hosting.abstractions/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.hosting/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Hosting.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.http/3.0.3/lib/netcoreapp3.0/Microsoft.Extensions.Http.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Logging.Configuration.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.console/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Logging.Console.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.debug/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Logging.Debug.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Logging.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.eventlog/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Logging.EventLog.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.logging.eventsource/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Logging.EventSource.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.options.configurationextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.options/5.0.0/lib/net5.0/Microsoft.Extensions.Options.dll /reference:/Users/phiph/.nuget/packages/microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.VisualBasic.Core.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.VisualBasic.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Win32.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/Microsoft.Win32.Registry.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/mscorlib.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/netstandard.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.AppContext.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Buffers.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Concurrent.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Immutable.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.NonGeneric.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Collections.Specialized.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.Annotations.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.DataAnnotations.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.EventBasedAsync.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ComponentModel.TypeConverter.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Configuration.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Console.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Core.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.Common.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.DataSetExtensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Data.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Contracts.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Debug.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.DiagnosticSource.dll /reference:/Users/phiph/.nuget/packages/system.diagnostics.eventlog/5.0.0/ref/netstandard2.0/System.Diagnostics.EventLog.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.FileVersionInfo.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Process.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.StackTrace.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.TextWriterTraceListener.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Tools.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.TraceSource.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Diagnostics.Tracing.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Drawing.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Drawing.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Dynamic.Runtime.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Formats.Asn1.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Formats.Tar.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.Calendars.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Globalization.Extensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.Brotli.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.FileSystem.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Compression.ZipFile.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.AccessControl.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.DriveInfo.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.FileSystem.Watcher.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.IsolatedStorage.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.MemoryMappedFiles.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Pipes.AccessControl.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.Pipes.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.IO.UnmanagedMemoryStream.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Expressions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Parallel.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Linq.Queryable.dll /reference:/Users/phiph/.nuget/packages/system.memory.data/1.0.1/lib/netstandard2.0/System.Memory.Data.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Memory.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Http.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Http.Json.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.HttpListener.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Mail.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.NameResolution.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.NetworkInformation.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Ping.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Quic.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Requests.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Security.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.ServicePoint.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.Sockets.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebClient.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebHeaderCollection.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebProxy.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebSockets.Client.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Net.WebSockets.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Numerics.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Numerics.Vectors.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ObjectModel.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.DispatchProxy.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.ILGeneration.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Emit.Lightweight.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Extensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Metadata.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Reflection.TypeExtensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.Reader.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.ResourceManager.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Resources.Writer.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.CompilerServices.Unsafe.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.CompilerServices.VisualC.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Extensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Handles.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.JavaScript.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.InteropServices.RuntimeInformation.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Intrinsics.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Loader.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Numerics.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Formatters.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Json.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Runtime.Serialization.Xml.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.AccessControl.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Claims.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Algorithms.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Cng.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Csp.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Encoding.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.OpenSsl.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.Primitives.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Cryptography.X509Certificates.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Principal.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.Principal.Windows.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Security.SecureString.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ServiceModel.Web.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ServiceProcess.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.CodePages.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encoding.Extensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Encodings.Web.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.Json.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Text.RegularExpressions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Channels.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Overlapped.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Dataflow.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Extensions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Tasks.Parallel.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Thread.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.ThreadPool.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Threading.Timer.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Transactions.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Transactions.Local.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.ValueTuple.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Web.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Web.HttpUtility.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Windows.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.Linq.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.ReaderWriter.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.Serialization.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XDocument.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XmlDocument.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XmlSerializer.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XPath.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/System.Xml.XPath.XDocument.dll /reference:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/ref/net7.0/WindowsBase.dll /debug+ /debug:portable /filealign:512 /optimize- /out:obj/Debug/net7.0/FunctionApp.dll /refout:obj/Debug/net7.0/refint/FunctionApp.dll /target:exe /warnaserror- /utf8output /deterministic+ /langversion:11.0 /analyzerconfig:obj/Debug/net7.0/FunctionApp.GeneratedMSBuildEditorConfig.editorconfig /analyzerconfig:/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_7_default.editorconfig /analyzer:/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll /analyzer:/usr/local/share/dotnet/sdk/7.0.401/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll /analyzer:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.sdk.analyzers/1.2.1/analyzers/dotnet/cs/Microsoft.Azure.Functions.Worker.Sdk.Analyzers.dll /analyzer:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.sdk.generators/1.1.1/analyzers/dotnet/cs/Microsoft.Azure.Functions.Worker.Sdk.Generators.dll /analyzer:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.sdk.generators/1.1.1/analyzers/dotnet/cs/Microsoft.Bcl.AsyncInterfaces.dll /analyzer:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.sdk.generators/1.1.1/analyzers/dotnet/cs/System.Text.Encodings.Web.dll /analyzer:/Users/phiph/.nuget/packages/microsoft.azure.functions.worker.sdk.generators/1.1.1/analyzers/dotnet/cs/System.Text.Json.dll /analyzer:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll /analyzer:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll /analyzer:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll /analyzer:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll /analyzer:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.11/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll HttpTrigger1.cs PrintTopicMessage.cs Program.cs obj/Debug/net7.0/FunctionApp.GlobalUsings.g.cs "obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs" obj/Debug/net7.0/FunctionApp.AssemblyInfo.cs /warnaserror+:NU1605,SYSLIB0011
FunctionApp -> /Users/phiph/Projects/Access/dapr-azure-functions/src/FunctionApp/bin/Debug/net7.0/FunctionApp.dll
Determining projects to restore...
0>WorkerExtensions.csproj: Error NU1102 : Unable to find package Microsoft.Azure.WebJobs.Extensions.Dapr with version (>= 99.99.99)
  - Found 3 version(s) in nuget.org [ Nearest version: 0.16.0-preview01 ]
  - Found 0 version(s) in /usr/local/share/dotnet/library-packs
Failed to restore /var/folders/3v/6jc532m15bq0fjdyx1w379c40000gn/T/b3sjkhmr.rk5/WorkerExtensions.csproj (in 216 ms).
0>------- Finished building project: FunctionApp. Succeeded: False. Errors: 1. Warnings: 0
Build completed in 00:00:01.093

Public Documentation

Public documentation needs to be available as a requirement for public preview. Some of the materials to consider including:

  • Getting started guide
  • Conceptual documentation
  • Reference documentation for bindings/triggers (example)
  • API docs for .NET (example)

The actual location of the docs is TBD.

Add graceful exception handling in the codebase

Throughout the code base, exceptions are

(1) either thrown directly, e.g.
https://github.com/Azure/dapr-azure-functions-extension/blob/a2cf2e5ca86166e588ff7c3829cfe276b73ab446/src/Dapr.AzureFunctions.Extension/Bindings/DaprSecretConverter.cs#L40-L41

(2) or, ignored, e.g.
https://github.com/Azure/dapr-azure-functions-extension/blob/a2cf2e5ca86166e588ff7c3829cfe276b73ab446/src/Dapr.AzureFunctions.Extension/Triggers/DaprTopicTriggerBindingProvider.cs#L147-L161

This issue proposes graceful handling of all exceptions. They should be thrown at the highest level with proper error messages, which makes it easy to troubleshoot the root cause. The exceptions should also be logged.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.