Azure ML Web 服务请求在 C# 中不起作用
Azure ML Web Service request not working in C#
我创建了一个 Azure ML Web 服务,它根据请求输出 JSON 响应,示例请求的结构如下:
{
"Inputs": {
"input1": {
"ColumnNames": [
"gender",
"age",
"income"
],
"Values": [
[
"value",
"0",
"0"
],
[
"value",
"0",
"0"
]
]
}
},
"GlobalParameters": {}
}
输入参数应该是这样的:
性别字符串
年龄数值
收入数字
我的 Post 方法如下所示:
[HttpPost]
public ActionResult GetPredictionFromWebService()
{
var gender = Request.Form["gender"];
var age = Request.Form["age"];
if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age))
{
var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result;
if (resultResponse != null)
{
var result = resultResponse.Results.Output1.Value.Values;
PersonResult = new Person
{
Gender = result[0, 0],
Age = Int32.Parse(result[0, 1]),
Income = Int32.Parse(result[0, 2])
};
}
}
return RedirectToAction("index");
}
但无论出于何种原因; Azure ML Webservice 似乎没有对我的请求做出任何响应。
有谁知道原因可能是什么?我没有看到任何错误或任何内容,只有一个空响应。
您的问题的答案是,在 Azure ML 的输入参数中写入的“数字”数据类型实际上是一个浮点数,而不是您收入度量的整数。因此,当尝试从 Azure ML 请求响应时,您没有以正确的格式向它提供正确响应所需的“足够”信息,导致它没有给您任何响应。
我相信根据您的输入参数,您的模型看起来与此类似:
public class Person
{
public string Gender { get; set; }
public int Age { get; set; }
public int Income { get; set; }
public override string ToString()
{
return Gender + "," + Age + "," + Income;
}
}
您必须像这样将您的收入数据类型更改为浮点数:
public class Person
{
public string Gender { get; set; }
public int Age { get; set; }
public float Income { get; set; }
public override string ToString()
{
return Gender + "," + Age + "," + Income;
}
}
然后你的 post-方法看起来像这样:
[HttpPost]
public ActionResult GetPredictionFromWebService()
{
var gender = Request.Form["gender"];
var age = Request.Form["age"];
if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age))
{
var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result;
if (resultResponse != null)
{
var result = resultResponse.Results.Output1.Value.Values;
PersonResult = new Person
{
Gender = result[0, 0],
Age = Int32.Parse(result[0, 1]),
Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat)
};
}
}
ViewBag.myData = PersonResult.Income.ToString();
return View("Index");
}
这里的关键很简单:
Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat)
而不是你的遗产
Income = Int32.Parse(result[0, 2])
我创建了一个 Azure ML Web 服务,它根据请求输出 JSON 响应,示例请求的结构如下:
{
"Inputs": {
"input1": {
"ColumnNames": [
"gender",
"age",
"income"
],
"Values": [
[
"value",
"0",
"0"
],
[
"value",
"0",
"0"
]
]
}
},
"GlobalParameters": {}
}
输入参数应该是这样的:
性别字符串
年龄数值
收入数字
我的 Post 方法如下所示:
[HttpPost]
public ActionResult GetPredictionFromWebService()
{
var gender = Request.Form["gender"];
var age = Request.Form["age"];
if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age))
{
var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result;
if (resultResponse != null)
{
var result = resultResponse.Results.Output1.Value.Values;
PersonResult = new Person
{
Gender = result[0, 0],
Age = Int32.Parse(result[0, 1]),
Income = Int32.Parse(result[0, 2])
};
}
}
return RedirectToAction("index");
}
但无论出于何种原因; Azure ML Webservice 似乎没有对我的请求做出任何响应。 有谁知道原因可能是什么?我没有看到任何错误或任何内容,只有一个空响应。
您的问题的答案是,在 Azure ML 的输入参数中写入的“数字”数据类型实际上是一个浮点数,而不是您收入度量的整数。因此,当尝试从 Azure ML 请求响应时,您没有以正确的格式向它提供正确响应所需的“足够”信息,导致它没有给您任何响应。
我相信根据您的输入参数,您的模型看起来与此类似:
public class Person
{
public string Gender { get; set; }
public int Age { get; set; }
public int Income { get; set; }
public override string ToString()
{
return Gender + "," + Age + "," + Income;
}
}
您必须像这样将您的收入数据类型更改为浮点数:
public class Person
{
public string Gender { get; set; }
public int Age { get; set; }
public float Income { get; set; }
public override string ToString()
{
return Gender + "," + Age + "," + Income;
}
}
然后你的 post-方法看起来像这样:
[HttpPost]
public ActionResult GetPredictionFromWebService()
{
var gender = Request.Form["gender"];
var age = Request.Form["age"];
if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age))
{
var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result;
if (resultResponse != null)
{
var result = resultResponse.Results.Output1.Value.Values;
PersonResult = new Person
{
Gender = result[0, 0],
Age = Int32.Parse(result[0, 1]),
Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat)
};
}
}
ViewBag.myData = PersonResult.Income.ToString();
return View("Index");
}
这里的关键很简单:
Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat)
而不是你的遗产
Income = Int32.Parse(result[0, 2])