哪种 Microsoft Azure 服务最适合我?
What Microsoft Azure service would be the best for me?
我主要是一名低级系统开发人员,所以我对 Azure 提供的所有高级工具和所有那些流行语有点迷茫。
所以这就是我要构建的东西:我正在构建一个服务器,它有一个处理部分(可能使用 Azure Batch)和一个存储部分(使用存储,呃,和数据库)。我想将所有这些隐藏在客户端应用程序可以的界面后面:
登录用户
Upload/Download 所选文件
管理他们目前的 运行 工作或开始一些新工作
客户端应用程序可能位于 iPad、Web 浏览器、PC 等...服务器端可能会出现或更改新功能。 这就是为什么会选择 "server interface" 来标准化所有客户端交互,但我不知道哪种 Azure 工具可以满足我对此界面的需求。 我不是在寻找什么低级别,如构建我自己的协议和服务器,只是可以简单地完成工作的东西。
干杯
莱昂坎坦
Azure 移动服务可能很适合这里。好处是您可以快速制作原型。在当前门户中,您可以将移动服务与 Node/JavaScript 后端或 ASP.NET WebAPI 后端一起使用。节点选项是fastest/easiest来实现的。这种方法的一些好处:
- 移动服务自动创建为 NoSQL 风格 table(认为它实际上存储在引擎盖下的 SQL Azure 数据库中)并为 CRUD 公开 REST 端点,以及每个端点的 JS 可自定义脚本。
- 移动服务具有 Windows(C# 或 WinJS)、iOS(Obj-C 或 Swift)、Android(Java ) 和 HTML5(Java脚本),这样您就可以轻松地将任何客户端应用程序连接到它。
- 移动服务还支持用Java脚本编写的后台作业。这可以用于您的背景 "processing part",但如果没有关于您想做什么的更多详细信息,很难进行评估。
- 您还可以获得对身份验证(Twitter、FB、Google、MSA 和 AD)+ 推送通知(WNS、GCM、APNS 等)的内置支持
在新的预览门户中,移动服务被应用服务(包括移动)所取代,但节点后端尚不受支持,因此我建议改用移动服务。您可以通过 ASP.NET WebAPI 后端获得更多控制权,但您也必须自己编写更多后端代码。优点是您可以将数据存储在任何地方(存储 tables、DocumentDB、SQL DB 等)
对于文件 upload/download,您必须使用 Azure 存储 blob,如果您的移动服务需要对与每个用户关联的文件进行分类,您只需保存完整的 blob "path" 对于移动服务中的每个文件 table.
Azure 移动服务的文档以及许多教程位于 http://azure.microsoft.com/en-us/documentation/services/mobile-services/. I also have 3 GitHub repos with sample code for Windows, iOS and Android that integrates with Mobile Services at https://github.com/search?q=user%3AActiveNick+AzureChatr, and a blog post that explains them at http://www.ageofmobility.com/2014/10/06/azurechatr-building-a-cross-platform-chat-app-for-windows-ios-android/。
希望对您有所帮助。
尼克
我不再选择 Web API,它让我 "call" 通过 HTTP 协议从服务器获得功能。 URL 是函数的 "name",数据要么在正文中序列化,要么在 URL 中序列化。非常简单和灵活,它应该在任何可以使用 HTTP 的框架上开箱即用,或者我可以找到一个库让我这样做。
我的测试代码如下所示:
客户:
private async Task SubmitJob()
{
JobModel job = new JobModel { ID = 42, name = "HelloJob", completion = 100.0f };
try
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsJsonAsync<JobModel>("http://localhost:53122/Jobs/Submit", job);
if (response.IsSuccessStatusCode)
lblSuccess.Text = "Success!";
else
lblSuccess.Text = "Failure!";
}
catch (Exception ex)
{
string s = ex.ToString();
}
}
private async Task GetJobs()
{
try
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://localhost:53122/Jobs/Info");
if (response.IsSuccessStatusCode)
{
List<JobModel> jobList = await response.Content.ReadAsAsync<List<JobModel>>();
txtConsole.Text = "";
foreach(var job in jobList)
{
string line = "ID: " + job.ID + " Name: " + job.name + " completion: " + job.completion + "\r\n";
txtConsole.Text += line;
}
}
else
{
txtConsole.Text = "Failure!";
}
}
catch (Exception ex)
{
string s = ex.ToString();
}
}
服务器:
public async Task<IHttpActionResult> GetJobInfo(int jobId)
{
try
{
JobModel a = new JobModel { name = "jobA", ID = 102, completion = 100.0f };
JobModel b = new JobModel { name = "jobB", ID = 104, completion = 42.0f };
JobModel c = new JobModel { name = "jobC", ID = 106, completion = 0.0f };
List<JobModel> result = new List<JobModel> { a, b, c };
return Ok(result);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
[HttpPost]
public async Task<IHttpActionResult> SubmitJob([FromBody] JobModel submitedJob)
{
return Ok();
}
我主要是一名低级系统开发人员,所以我对 Azure 提供的所有高级工具和所有那些流行语有点迷茫。
所以这就是我要构建的东西:我正在构建一个服务器,它有一个处理部分(可能使用 Azure Batch)和一个存储部分(使用存储,呃,和数据库)。我想将所有这些隐藏在客户端应用程序可以的界面后面:
登录用户
Upload/Download 所选文件
管理他们目前的 运行 工作或开始一些新工作
客户端应用程序可能位于 iPad、Web 浏览器、PC 等...服务器端可能会出现或更改新功能。 这就是为什么会选择 "server interface" 来标准化所有客户端交互,但我不知道哪种 Azure 工具可以满足我对此界面的需求。 我不是在寻找什么低级别,如构建我自己的协议和服务器,只是可以简单地完成工作的东西。
干杯
莱昂坎坦
Azure 移动服务可能很适合这里。好处是您可以快速制作原型。在当前门户中,您可以将移动服务与 Node/JavaScript 后端或 ASP.NET WebAPI 后端一起使用。节点选项是fastest/easiest来实现的。这种方法的一些好处:
- 移动服务自动创建为 NoSQL 风格 table(认为它实际上存储在引擎盖下的 SQL Azure 数据库中)并为 CRUD 公开 REST 端点,以及每个端点的 JS 可自定义脚本。
- 移动服务具有 Windows(C# 或 WinJS)、iOS(Obj-C 或 Swift)、Android(Java ) 和 HTML5(Java脚本),这样您就可以轻松地将任何客户端应用程序连接到它。
- 移动服务还支持用Java脚本编写的后台作业。这可以用于您的背景 "processing part",但如果没有关于您想做什么的更多详细信息,很难进行评估。
- 您还可以获得对身份验证(Twitter、FB、Google、MSA 和 AD)+ 推送通知(WNS、GCM、APNS 等)的内置支持
在新的预览门户中,移动服务被应用服务(包括移动)所取代,但节点后端尚不受支持,因此我建议改用移动服务。您可以通过 ASP.NET WebAPI 后端获得更多控制权,但您也必须自己编写更多后端代码。优点是您可以将数据存储在任何地方(存储 tables、DocumentDB、SQL DB 等)
对于文件 upload/download,您必须使用 Azure 存储 blob,如果您的移动服务需要对与每个用户关联的文件进行分类,您只需保存完整的 blob "path" 对于移动服务中的每个文件 table.
Azure 移动服务的文档以及许多教程位于 http://azure.microsoft.com/en-us/documentation/services/mobile-services/. I also have 3 GitHub repos with sample code for Windows, iOS and Android that integrates with Mobile Services at https://github.com/search?q=user%3AActiveNick+AzureChatr, and a blog post that explains them at http://www.ageofmobility.com/2014/10/06/azurechatr-building-a-cross-platform-chat-app-for-windows-ios-android/。
希望对您有所帮助。
尼克
我不再选择 Web API,它让我 "call" 通过 HTTP 协议从服务器获得功能。 URL 是函数的 "name",数据要么在正文中序列化,要么在 URL 中序列化。非常简单和灵活,它应该在任何可以使用 HTTP 的框架上开箱即用,或者我可以找到一个库让我这样做。
我的测试代码如下所示:
客户:
private async Task SubmitJob()
{
JobModel job = new JobModel { ID = 42, name = "HelloJob", completion = 100.0f };
try
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsJsonAsync<JobModel>("http://localhost:53122/Jobs/Submit", job);
if (response.IsSuccessStatusCode)
lblSuccess.Text = "Success!";
else
lblSuccess.Text = "Failure!";
}
catch (Exception ex)
{
string s = ex.ToString();
}
}
private async Task GetJobs()
{
try
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://localhost:53122/Jobs/Info");
if (response.IsSuccessStatusCode)
{
List<JobModel> jobList = await response.Content.ReadAsAsync<List<JobModel>>();
txtConsole.Text = "";
foreach(var job in jobList)
{
string line = "ID: " + job.ID + " Name: " + job.name + " completion: " + job.completion + "\r\n";
txtConsole.Text += line;
}
}
else
{
txtConsole.Text = "Failure!";
}
}
catch (Exception ex)
{
string s = ex.ToString();
}
}
服务器:
public async Task<IHttpActionResult> GetJobInfo(int jobId)
{
try
{
JobModel a = new JobModel { name = "jobA", ID = 102, completion = 100.0f };
JobModel b = new JobModel { name = "jobB", ID = 104, completion = 42.0f };
JobModel c = new JobModel { name = "jobC", ID = 106, completion = 0.0f };
List<JobModel> result = new List<JobModel> { a, b, c };
return Ok(result);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
[HttpPost]
public async Task<IHttpActionResult> SubmitJob([FromBody] JobModel submitedJob)
{
return Ok();
}