【问题标题】:What Microsoft Azure service would be the best for me? [closed]哪种 Microsoft Azure 服务最适合我? [关闭]
【发布时间】:2015-07-10 14:13:26
【问题描述】:

我主要是一名低级系统开发人员,所以我对 Azure 提供的所有高级工具和所有流行语有点迷茫。

这就是我要构建的内容: 我正在构建一个服务器,它有一个处理部分(可能使用 Azure Batch)和一个存储部分(使用存储、duh 和 DB)。我想将所有这些隐藏在客户端应用程序可以的界面后面:

  • 登录用户

  • 上传/下载选定的文件

  • 管理他们当前正在运行的作业或开始一些新的作业

客户端应用程序可能位于 iPad、Web 浏览器、PC 等...新功能可能会在服务器端出现或更改。 这就是为什么选择“服务器接口”来标准化所有客户端交互的原因,但我不知道哪个 Azure 工具适合我对这个接口的需求。我不是在寻找低级别的东西构建我自己的协议和服务器,只是为了简单地完成工作。

干杯

莱昂·康廷

【问题讨论】:

    标签: c# azure azure-batch


    【解决方案1】:

    Azure 移动服务可能非常适合这里。好处是您可以快速制作原型。在当前门户中,您可以将移动服务与 Node/JavaScript 后端或 ASP.NET WebAPI 后端一起使用。节点选项是最快/最容易实现的。这种方法的一些好处:

    • 移动服务自动使用 NoSQL 样式表创建(认为它实际上存储在 SQL Azure DB 中)并公开 CRUD 的 REST 端点,以及每个端点的 JS 中可自定义的脚本。
    • Mobile Services 具有适用于 Windows(C# 或 WinJS)、iOS(Obj-C 或 Swift)、Android (Java) 和 HTML5 (JavaScript) 的原生 SDK,因此您可以轻松地将任何客户端应用程序连接到它。李>
    • 移动服务还支持用 JavaScript 编写的后台作业。这可以用于您的后台“处理部分”,但如果没有更多关于您想要做什么的详细信息,很难评估。
    • 您还可以获得对身份验证(Twitter、FB、Google、MSA 和 AD)+ 推送通知(WNS、GCM、APNS 等)的内置支持

    在新的预览门户中,移动服务已被应用服务(包括移动)取代,但尚不支持节点后端,因此我建议改用移动服务。您可以通过 ASP.NET WebAPI 后端获得更多控制权,但您还必须自己编写更多后端代码。优点是您可以将数据存储在任何地方(存储表、DocumentDB、SQL DB 等)

    对于文件上传/下载,您必须使用 Azure 存储 blob,如果您的移动服务需要对与每个用户关联的文件进行编目,您只需将每个文件的完整 blob“路径”保存在移动服务表。

    Azure 移动服务的文档以及许多教程位于 http://azure.microsoft.com/en-us/documentation/services/mobile-services/。我还有 3 个 GitHub 存储库,其中包含与移动服务集成的 Windows、iOS 和 Android 示例代码,地址为 https://github.com/search?q=user%3AActiveNick+AzureChatr,以及一篇解释它们的博客文章,地址为 http://www.ageofmobility.com/2014/10/06/azurechatr-building-a-cross-platform-chat-app-for-windows-ios-android/

    我希望这会有所帮助。

    尼克

    【讨论】:

    • 感谢您的回答,我实际上在某个时候考虑过移动应用程序并找到了您的网站。我尝试了您拥有的一些示例,但由于我没有 Windows 8,因此无法运行它们。它似乎具有我不需要的额外功能,而且我迷失了一切,而且它似乎只能工作对于手机。我正在寻找更通用的解决方案,但如果我错了,请纠正我。我目前正在考虑 API Web 应用程序,它公开了一个 REST API,它看起来很通用,可以在各种设备上工作。
    • 移动服务最简单的解决方案,它公开了一个 REST API。如果您发现它们太复杂,请忘记我的示例。只需尝试基本的移动服务教程,例如用于 iOS 的 azure.microsoft.com/en-us/documentation/articles/… 或用于 Web 的 azure.microsoft.com/en-us/documentation/articles/…
    • 嗯,我想“简单”是主观的,因为移动应用程序添加的所有额外功能都不是我能做的,只会让我感到困惑。也许是因为我是一个比较低级的人。我将满足于 Web API,它通过 REST 调用公开了我需要的东西。这几乎就像调用一个函数,其中名称在链接中,并且数据在 HTTP 请求的正文中使用标准进行序列化。这就是我制作多平台服务器界面所需要的一切。也许我以后会考虑移动应用程序,所以谢谢!
    【解决方案2】:

    我最终选择了一个 Web API,它让我可以通过 HTTP 协议从服务器“调用”函数。 URL 是函数的“名称”,数据要么在正文中序列化,要么在 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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 2013-02-08
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多