Utworzyłem funkcję Azure (2.0 V) z szablonu C # HTTP. Następnie dodałem wiązanie wyjściowe do CosmosDB na podstawie COSMOSDB Docs:

public static class AddEvent

{
    [FunctionName("AddEvent")]
    public static void Run(

        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequest req, 
        [CosmosDB("SomeDatabase", "SomeCollection", Id = "id", 
        ConnectionStringSetting = "myCosmosDB", CreateIfNotExists = true)] 
            out dynamic document)
    {
        document = new { Text = "something", id = Guid.NewGuid() };
    }
}

Pakiety, których używam (plik Csproj):

<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.0-beta7" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.11" />

To jest moje lokalne.Settings.json. Opierałem je na wartościach z emulatora COSMOSDB:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "AzureWebJobsDashboard": "",
        "myCosmosDB": "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
    }
}

Niestety, kiedy trafię HTTP Trigger, dostaję:

System.Private.CoreLib: Exception while executing function: AddEvent.
Microsoft.Azure.WebJobs.Host: Exception binding parameter 'document'.
Microsoft.Azure.DocumentDB.Core: The type initializer for 'Microsoft.Azure.Documents.UserAgentContainer' threw an exception. 
Object reference not set to an instance of an object.

Co oznacza ten wyjątek? Nie mogę znaleźć żadnych istotnych informacji o tym i całkowicie zatrzymuje moją lokalną pracę. Funkcja działa dobrze bez atrybutu kosmosdb.

2
Radosław Maziarka 4 czerwiec 2018, 15:55

3 odpowiedzi

Najlepsza odpowiedź

Powinien być przełomową zmianą nowego CLI. Spróbuj obniżyć CLI na 2.0.1-beta.25, działa po mojej stronie. BTW, polecam aktualizację Microsoft.NET.Sdk.Functions do 1.0.13, aby uniknąć możliwego wyjątku.

beta.24 wydaje się przestarzały, a także powoduje błąd Method not found po mojej stronie. Podczas beta.26 prowadzi do błędu tak samo jak {x3}}.

Jednakże, jeśli debuguję projekt bezpośrednio za pomocą vs (który używa wersja beta.26 No-Runtime) lub opublikuj go do Azure, działa dobrze. Otworzyły się Problem na GitHub, możesz go śledzić, jeśli jesteś zainteresowany.

Aktualizuj

Rozwiązany w 2.0.1-beta.29, Runtime 2.0.11857.0.

2
Jerry Liu 15 czerwiec 2018, 04:02

Była to regresja z najnowszą wersją (2.0.11776) gospodarza. Zostało to rozwiązane, a wydanie jest obecnie w toku.

4
Fabio Cavalcante 8 czerwiec 2018, 01:08

Jaka wersja pakietu Dokumentujesz odwołujesz się?

Zalecenie byłoby albo:

Obniżyć dowolny dokumentdb Nuget do 1.13.2.

Usuń całkowitą referencję DokumentuDB, a zamiast tego bezpośrednio referencje Microsoft.azure.webjobs.extensions.documentdb, który odniesie odpowiednią wersję dla Ciebie.

-1
Sajeetharan 4 czerwiec 2018, 14:43