我在代码中有一个条件,我需要检查当前环境是否不是local.i已使用private void recordAudio()
{
if (memoryStream == null)
memoryStream = new MemoryStream();
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1);
waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
waveWriter = new WaveFileWriter(new IgnoreDisposeStream(memoryStream), waveIn.WaveFormat);
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
buff = new BufferedWaveProvider(waveIn.WaveFormat);
sourceStream.StartRecording();
mytimer.Enabled = true;
}
private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
buff.AddSamples(e.Buffer, 0, e.BytesRecorded);
Console.WriteLine("test");
}
void mytimer_Tick(object sender, EventArgs e)
{
if (sourceStream != null)
{
sourceStream.StopRecording();
waveWriter.Flush();
var amazonLexClient = new AmazonLexClient(Amazon.RegionEndpoint.USEast1);
var amazonPostRequest = new Amazon.Lex.Model.PostContentRequest();
var amazonPostResponse = new Amazon.Lex.Model.PostContentResponse();
amazonPostRequest.BotAlias = "voiceBot";
amazonPostRequest.BotName = "voiceBot";
amazonPostRequest.ContentType = "audio/l16; rate=16000; channels=1";
amazonPostRequest.UserId = "user";
amazonPostRequest.InputStream = memoryStream;
amazonPostRequest.UserId = "test";
try
{
amazonPostResponse = amazonLexClient.PostContent(amazonPostRequest);
Console.WriteLine("Got a response");
}
catch (Exception w)
{
Console.WriteLine("{0} Exception caught.", e);
Console.WriteLine(w.Message);
}
,现在这在Azure功能中不起作用,但在云服务中有效。相同的代码也在云服务中共享,因此解决方案应该与云服务和天蓝色功能一起使用。
如何检查当前环境是否未托管/部署?
答案 0 :(得分:3)
您可以使用类似于实际运行时使用的方法来确定它是否在Azure上运行: https://github.com/Azure/azure-webjobs-sdk-script/blob/efb55da/src/WebJobs.Script/Config/ScriptSettingsManager.cs#L25
在这种情况下,运行时会检查是否存在名为WEBSITE_INSTANCE_ID
答案 1 :(得分:2)
根据Fabio Cavalcante的回答,这是一个有效的Azure功能,可以检查当前的运行环境(本地或托管):
super("title");
答案 2 :(得分:1)
我不确定依赖于一些内部实现是不是一个好主意,例如WEBSITE_INSTANCE_ID
在其他答案中给出了建议。
我刚刚使用了一种非常简单的方法,通过 local.settings.json
定义了我自己的环境变量:
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"IS_RUNNING_LOCALLY": true
}
}
然后我就这样检查:
bool isLocal = Environment.GetEnvironmentVariable("IS_RUNNING_LOCALLY") == "true";
这是一种解决方法,但它简单直观,应该相当安全。
我尝试使用 AZURE_FUNCTIONS_ENVIRONMENT
,但无法在本地文件中设置它,因为运行时抱怨它已经存在,这似乎很愚蠢,因为您可以将环境设置为“本地”,例如
附言似乎依靠例如默认环境是有风险的,因为有多个与之相关的错误,并且您不能完全保证它是文档声称的“生产”。见例如here。
答案 3 :(得分:0)
您可以使用AZURE_FUNCTIONS_ENVIRONMENT
环境变量,该变量是自动设置的:
Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT"); // set to "Development" locally