C# 代码不断遇到一个进程 5656 退出并出现代码 -1 错误,但不清楚错误是什么以及失败的位置
C# code keeps hitting a process 5656 exited with code -1 error, but not clear what the error is and where it's failing
我正在尝试获取将视频上传到 Youtube 频道的示例 Youtube API 代码 https://developers.google.com/youtube/v3/docs/videos/insert,并将此代码包装在 Azure 函数中 (Function1.cs)。我看到的问题是,如果我当前 运行 该函数,它会向控制台抛出一个错误,我不确定错误的含义。
C:\Users\Peter\AppData\Local\AzureFunctionsTools\Releases.4.1\cli_x64\func.exe
(process 5656) exited with code -1.
我实际上只是复制示例代码(只是简化了一些事情)并将其放入 Azure 函数中。我的函数中是否缺少任何其他逻辑?我怀疑我的函数没有读取 client_secrets.json 还是其他问题?我确实注意到的一件事是该功能本身运行良好,但“处理和上传视频”不起作用。请看看我的功能并提出我做错了什么?我想
验证我的逻辑是否正确或是否可以改进实施。谢谢。
这是 Youtube API ‘上传’代码示例,取自 (https://developers.google.com/youtube/v3/docs/videos/
并将该示例代码转换为 Azure 函数:
Function1.cs:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Upload;
using Google.Apis.YouTube.v3.Data;
using System.Reflection;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Threading;
namespace YoutubeUploadFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([BlobTrigger("video/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, Microsoft.Azure.WebJobs.ExecutionContext context, ILogger log)
{
UserCredential credential;
using (var stream = new FileStream(System.IO.Path.Combine(context.FunctionDirectory, "client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = "Default Video Title";
video.Snippet.Description = "Default Video Description";
video.Snippet.Tags = new string[] { "tag1", "tag2" };
video.Snippet.CategoryId = "22";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
var VideoInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", myBlob, "video/*");
await VideoInsertRequest.UploadAsync();
}
}
}
这是控制台输出:
Azure Functions Core Tools (3.0.2245 Commit hash: 1d094e2f3ef79b9a478a1621ea7ec3f93ac1910d)
Function Runtime Version: 3.0.13139.0
[3/16/2020 6:02:11 PM] Building host: startup suppressed: 'False', configuration suppressed: 'False', startup operation id: 'a37bba12-9125-4af6-8c10-26daef57ef90'
[3/16/2020 6:02:11 PM] Reading host configuration file 'C:\Users\Peter\Desktop\UploadVideo\YoutubeUploadFunction\YoutubeUploadFunction\bin\Debug\netcoreapp3.0\host.json'
[3/16/2020 6:02:11 PM] Host configuration file read:
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "version": "2.0"
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] Reading functions metadata
[3/16/2020 6:02:11 PM] 1 functions found
[3/16/2020 6:02:11 PM] Loading startup extension 'AzureStorage'
[3/16/2020 6:02:11 PM] Loaded extension 'AzureStorage' (3.0.4.0)
[3/16/2020 6:02:11 PM] Initializing Warmup Extension.
[3/16/2020 6:02:11 PM] Initializing Host. OperationId: 'a37bba12-9125-4af6-8c10-26daef57ef90'.
[3/16/2020 6:02:11 PM] Host initialization: ConsecutiveErrors=0, StartupCount=1, OperationId=a37bba12-9125-4af6-8c10-26daef57ef90
[3/16/2020 6:02:11 PM] LoggerFilterOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "MinLevel": "None",
[3/16/2020 6:02:11 PM] "Rules": [
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": null,
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": null,
[3/16/2020 6:02:11 PM] "Filter": "<AddFilter>b__0"
[3/16/2020 6:02:11 PM] },
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": "None",
[3/16/2020 6:02:11 PM] "Filter": null
[3/16/2020 6:02:11 PM] },
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": null,
[3/16/2020 6:02:11 PM] "Filter": "<AddFilter>b__0"
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] ]
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] FunctionResultAggregatorOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "BatchSize": 1000,
[3/16/2020 6:02:11 PM] "FlushTimeout": "00:00:30",
[3/16/2020 6:02:11 PM] "IsEnabled": true
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] SingletonOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "LockPeriod": "00:00:15",
[3/16/2020 6:02:11 PM] "ListenerLockPeriod": "00:00:15",
[3/16/2020 6:02:11 PM] "LockAcquisitionTimeout": "10675199.02:48:05.4775807",
[3/16/2020 6:02:12 PM] "LockAcquisitionPollingInterval": "00:00:05",
[3/16/2020 6:02:12 PM] "ListenerLockRecoveryPollingInterval": "00:01:00"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] QueuesOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "BatchSize": 16,
[3/16/2020 6:02:12 PM] "NewBatchThreshold": 8,
[3/16/2020 6:02:12 PM] "MaxPollingInterval": "00:00:02",
[3/16/2020 6:02:12 PM] "MaxDequeueCount": 5,
[3/16/2020 6:02:12 PM] "VisibilityTimeout": "00:00:00"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] BlobsOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "CentralizedPoisonQueue": false
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] HttpOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "DynamicThrottlesEnabled": false,
[3/16/2020 6:02:12 PM] "MaxConcurrentRequests": -1,
[3/16/2020 6:02:12 PM] "MaxOutstandingRequests": -1,
[3/16/2020 6:02:12 PM] "RoutePrefix": "api"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] Starting JobHost
[3/16/2020 6:02:12 PM] Starting Host (HostId=desktopgq271u4-950774370, InstanceId=16bc66b5-e751-4c00-b383-6f705e303c13, Version=3.0.13139.0, ProcessId=5656, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=(null))
[3/16/2020 6:02:12 PM] Loading functions metadata
[3/16/2020 6:02:12 PM] 1 functions loaded
[3/16/2020 6:02:12 PM] Generating 1 job function(s)
[3/16/2020 6:02:12 PM] Found the following functions:
[3/16/2020 6:02:12 PM] YoutubeUploadFunction.Function1.Run
[3/16/2020 6:02:12 PM]
[3/16/2020 6:02:14 PM] Initializing function HTTP routes
[3/16/2020 6:02:14 PM] No HTTP routes mapped
[3/16/2020 6:02:14 PM]
[3/16/2020 6:02:14 PM] Host initialized (2033ms)
[3/16/2020 6:02:14 PM] Host started (2485ms)
[3/16/2020 6:02:14 PM] Job host started
Hosting environment: Production
Content root path: C:\Users\Peter\Desktop\UploadVideo\YoutubeUploadFunction\YoutubeUploadFunction\bin\Debug\netcoreapp3.0
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.
[3/16/2020 6:02:19 PM] Host lock lease acquired by instance ID '000000000000000000000000A74A8599'.
C:\Users\Peter\AppData\Local\AzureFunctionsTools\Releases.4.1\cli_x64\func.exe (process 5656) exited with code -1.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
只是一些建议。
有 3 个不同的东西:Function 平台、Azure 存储服务和 Youtube API。
要缩小问题范围,您可以尝试:
直接从本地文件系统获取视频内容,但Azure存储服务。然后尝试上传视频,看看能不能上传成功。
- 如果视频可以成功上传,则问题可能出在使用 blob 触发器从函数中的存储中获取内容。
- 如果没有,那么我认为您应该查看 Youtube API。
尝试将输入绑定到 CloudBlockBlob
而不是流。然后手动从 CloudBlockBlib
对象中获取内容。
编写一个控制台应用程序来检查整个工作流程。
我正在尝试获取将视频上传到 Youtube 频道的示例 Youtube API 代码 https://developers.google.com/youtube/v3/docs/videos/insert,并将此代码包装在 Azure 函数中 (Function1.cs)。我看到的问题是,如果我当前 运行 该函数,它会向控制台抛出一个错误,我不确定错误的含义。
C:\Users\Peter\AppData\Local\AzureFunctionsTools\Releases.4.1\cli_x64\func.exe (process 5656) exited with code -1.
我实际上只是复制示例代码(只是简化了一些事情)并将其放入 Azure 函数中。我的函数中是否缺少任何其他逻辑?我怀疑我的函数没有读取 client_secrets.json 还是其他问题?我确实注意到的一件事是该功能本身运行良好,但“处理和上传视频”不起作用。请看看我的功能并提出我做错了什么?我想 验证我的逻辑是否正确或是否可以改进实施。谢谢。
这是 Youtube API ‘上传’代码示例,取自 (https://developers.google.com/youtube/v3/docs/videos/
并将该示例代码转换为 Azure 函数:
Function1.cs:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Upload;
using Google.Apis.YouTube.v3.Data;
using System.Reflection;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Threading;
namespace YoutubeUploadFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([BlobTrigger("video/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, Microsoft.Azure.WebJobs.ExecutionContext context, ILogger log)
{
UserCredential credential;
using (var stream = new FileStream(System.IO.Path.Combine(context.FunctionDirectory, "client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = "Default Video Title";
video.Snippet.Description = "Default Video Description";
video.Snippet.Tags = new string[] { "tag1", "tag2" };
video.Snippet.CategoryId = "22";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
var VideoInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", myBlob, "video/*");
await VideoInsertRequest.UploadAsync();
}
}
}
这是控制台输出:
Azure Functions Core Tools (3.0.2245 Commit hash: 1d094e2f3ef79b9a478a1621ea7ec3f93ac1910d)
Function Runtime Version: 3.0.13139.0
[3/16/2020 6:02:11 PM] Building host: startup suppressed: 'False', configuration suppressed: 'False', startup operation id: 'a37bba12-9125-4af6-8c10-26daef57ef90'
[3/16/2020 6:02:11 PM] Reading host configuration file 'C:\Users\Peter\Desktop\UploadVideo\YoutubeUploadFunction\YoutubeUploadFunction\bin\Debug\netcoreapp3.0\host.json'
[3/16/2020 6:02:11 PM] Host configuration file read:
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "version": "2.0"
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] Reading functions metadata
[3/16/2020 6:02:11 PM] 1 functions found
[3/16/2020 6:02:11 PM] Loading startup extension 'AzureStorage'
[3/16/2020 6:02:11 PM] Loaded extension 'AzureStorage' (3.0.4.0)
[3/16/2020 6:02:11 PM] Initializing Warmup Extension.
[3/16/2020 6:02:11 PM] Initializing Host. OperationId: 'a37bba12-9125-4af6-8c10-26daef57ef90'.
[3/16/2020 6:02:11 PM] Host initialization: ConsecutiveErrors=0, StartupCount=1, OperationId=a37bba12-9125-4af6-8c10-26daef57ef90
[3/16/2020 6:02:11 PM] LoggerFilterOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "MinLevel": "None",
[3/16/2020 6:02:11 PM] "Rules": [
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": null,
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": null,
[3/16/2020 6:02:11 PM] "Filter": "<AddFilter>b__0"
[3/16/2020 6:02:11 PM] },
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": "None",
[3/16/2020 6:02:11 PM] "Filter": null
[3/16/2020 6:02:11 PM] },
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[3/16/2020 6:02:11 PM] "CategoryName": null,
[3/16/2020 6:02:11 PM] "LogLevel": null,
[3/16/2020 6:02:11 PM] "Filter": "<AddFilter>b__0"
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] ]
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] FunctionResultAggregatorOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "BatchSize": 1000,
[3/16/2020 6:02:11 PM] "FlushTimeout": "00:00:30",
[3/16/2020 6:02:11 PM] "IsEnabled": true
[3/16/2020 6:02:11 PM] }
[3/16/2020 6:02:11 PM] SingletonOptions
[3/16/2020 6:02:11 PM] {
[3/16/2020 6:02:11 PM] "LockPeriod": "00:00:15",
[3/16/2020 6:02:11 PM] "ListenerLockPeriod": "00:00:15",
[3/16/2020 6:02:11 PM] "LockAcquisitionTimeout": "10675199.02:48:05.4775807",
[3/16/2020 6:02:12 PM] "LockAcquisitionPollingInterval": "00:00:05",
[3/16/2020 6:02:12 PM] "ListenerLockRecoveryPollingInterval": "00:01:00"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] QueuesOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "BatchSize": 16,
[3/16/2020 6:02:12 PM] "NewBatchThreshold": 8,
[3/16/2020 6:02:12 PM] "MaxPollingInterval": "00:00:02",
[3/16/2020 6:02:12 PM] "MaxDequeueCount": 5,
[3/16/2020 6:02:12 PM] "VisibilityTimeout": "00:00:00"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] BlobsOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "CentralizedPoisonQueue": false
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] HttpOptions
[3/16/2020 6:02:12 PM] {
[3/16/2020 6:02:12 PM] "DynamicThrottlesEnabled": false,
[3/16/2020 6:02:12 PM] "MaxConcurrentRequests": -1,
[3/16/2020 6:02:12 PM] "MaxOutstandingRequests": -1,
[3/16/2020 6:02:12 PM] "RoutePrefix": "api"
[3/16/2020 6:02:12 PM] }
[3/16/2020 6:02:12 PM] Starting JobHost
[3/16/2020 6:02:12 PM] Starting Host (HostId=desktopgq271u4-950774370, InstanceId=16bc66b5-e751-4c00-b383-6f705e303c13, Version=3.0.13139.0, ProcessId=5656, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=(null))
[3/16/2020 6:02:12 PM] Loading functions metadata
[3/16/2020 6:02:12 PM] 1 functions loaded
[3/16/2020 6:02:12 PM] Generating 1 job function(s)
[3/16/2020 6:02:12 PM] Found the following functions:
[3/16/2020 6:02:12 PM] YoutubeUploadFunction.Function1.Run
[3/16/2020 6:02:12 PM]
[3/16/2020 6:02:14 PM] Initializing function HTTP routes
[3/16/2020 6:02:14 PM] No HTTP routes mapped
[3/16/2020 6:02:14 PM]
[3/16/2020 6:02:14 PM] Host initialized (2033ms)
[3/16/2020 6:02:14 PM] Host started (2485ms)
[3/16/2020 6:02:14 PM] Job host started
Hosting environment: Production
Content root path: C:\Users\Peter\Desktop\UploadVideo\YoutubeUploadFunction\YoutubeUploadFunction\bin\Debug\netcoreapp3.0
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.
[3/16/2020 6:02:19 PM] Host lock lease acquired by instance ID '000000000000000000000000A74A8599'.
C:\Users\Peter\AppData\Local\AzureFunctionsTools\Releases.4.1\cli_x64\func.exe (process 5656) exited with code -1.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
只是一些建议。
有 3 个不同的东西:Function 平台、Azure 存储服务和 Youtube API。
要缩小问题范围,您可以尝试:
直接从本地文件系统获取视频内容,但Azure存储服务。然后尝试上传视频,看看能不能上传成功。
- 如果视频可以成功上传,则问题可能出在使用 blob 触发器从函数中的存储中获取内容。
- 如果没有,那么我认为您应该查看 Youtube API。
尝试将输入绑定到
CloudBlockBlob
而不是流。然后手动从CloudBlockBlib
对象中获取内容。编写一个控制台应用程序来检查整个工作流程。