Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何构建我的应用程序以支持移动应用程序';s_C#_Wcf_Mobile_Architecture_Asp.net Web Api - Fatal编程技术网

C# 我应该如何构建我的应用程序以支持移动应用程序';s

C# 我应该如何构建我的应用程序以支持移动应用程序';s,c#,wcf,mobile,architecture,asp.net-web-api,C#,Wcf,Mobile,Architecture,Asp.net Web Api,我正在寻求有关我的系统架构的帮助。让我概述一下: 我有一个通过一组wcf服务访问的sql server和oracle数据库 这些wcf服务端点被许多web应用程序使用 所有应用程序都是用.NETC#4.0编写的 现在需要一个移动应用程序(iphone应用程序、android应用程序)来访问数据库提供的数据 我的第一个问题是,向移动应用程序提供数据的最佳媒介是什么?我认为可以选择通过我现有的wcf服务或包装器项目(称为现有wcf服务)公开移动应用程序可以访问的WebApi或MVC控制器。关于移动应

我正在寻求有关我的系统架构的帮助。让我概述一下:

我有一个通过一组wcf服务访问的sql server和oracle数据库

这些wcf服务端点被许多web应用程序使用

所有应用程序都是用.NETC#4.0编写的

现在需要一个移动应用程序(iphone应用程序、android应用程序)来访问数据库提供的数据

我的第一个问题是,向移动应用程序提供数据的最佳媒介是什么?我认为可以选择通过我现有的wcf服务或包装器项目(称为现有wcf服务)公开移动应用程序可以访问的WebApi或MVC控制器。关于移动应用程序消费的最佳方法的建议。需要注意的是,移动应用程序的有效负载很小,并且还需要采取安全措施来防止未经授权的移动应用程序访问服务/包装器项目

我的下一个问题是关于WCF服务的版本控制。我希望能够无缝地更新wcf服务,而不会影响潜在的包装器项目,反之亦然。由于第三方移动应用程序将处于不同的发布周期,因此需要支持多个版本。我希望这可能涉及部署应用程序的多个版本,但想知道通常如何处理这种做法


所有应用程序都部署在IIS 7.0中的windows服务器上。

嗯。。。我很想听到其他答案,但这是我对你问题的看法

首先,我认为您应该将业务逻辑与WCF服务分离,如果您还没有这样做的话。这使您能够与WCF服务并排设置ASP.NET Web Api服务。与其让MVC或WebAPI调用到WCF中,它还可以作为替代方案并排出现

您也可以在WCF服务中创建Json端点,尽管我更喜欢同时拥有WCF和Web Api的想法,因为最新版本更具互操作性。如果您将所有逻辑与服务分离,那么当共享所有业务逻辑时,它们应该变得相当简单

对于您的移动iphone和android应用程序,使用Web Api服务可能更容易。我在维护多个版本的服务Api方面没有太多经验,但是如果你有连接到Web Api服务的移动应用程序,你可以通过为每个Api版本创建多个文件夹来创建多个版本。这将导致业务逻辑的重复


正如我所说,我对其他观点非常感兴趣。

正如Dante所说,我肯定会将JSON作为我的数据格式。也按建议分为n层

就授权而言

您有多少第三方应用程序?听起来您的资源不多,但如果您有(而且他们是真正的第三方,即不是由您控制的),那么您可能需要为此寻找OAUTH解决方案

如果你只有一小撮,而且你在掌控之中,那在我看来就太过分了,相反,我只需要一个每个应用程序都知道的简单密钥。每次调用都会传递密钥,服务会对此进行检查。显然,所有传输都应该通过SSL进行,这样就没有人可以窃听密钥或数据是什么


在检查密钥方面,您需要利用方面或自定义属性来避免在每个函数上编写锅炉板。

如果您需要移动支持,最好避免使用WCF和Web API。原因是,虽然所有本地移动平台都可以使用XML,并且在WCF中可以使用基本HTTP绑定来模拟旧式web服务,但web API提供了通过HTTP的精简和平均通信,这些平台的浏览器也可以使用,而不仅仅是本地代码

如果是移动的和互操作性的,我会毫不犹豫地使用WebAPI


我只会在中使用WCF

如有疑问,请插入摘要。 我可以想象您已经构建的服务是域服务。这些服务通过一个模型(DTO)和一个更新(API)服务于多个具有不同需求的客户机。为了实现这一点,您可以轻松地进行版本转换,并能够灵活地减少在线内容,为您想要支持的屏幕引入一个层

我建议构建一个“移动服务”,它只能依赖于域服务,并且有方法将DTO转换为移动可消费块。该层可以位于ASP.NET WebAPI内部,也可以位于vert.x或node.js外部,以便您可以根据需要启动功能。最终,您需要的是域和消费者之间的服务合同,并且在他们之间引入一个层,从长远来看,将使您能够在不产生巨大成本的情况下替换任何一端。它将允许您根据任何一种需要对API进行版本设置,而无需重新接触整个堆栈

当然,你想考虑一种让客户端设备提前告诉你的方式,他们从服务中需要什么能力,这样你就可以确定要达到的逻辑端点。这将允许您为客户机和域之间的版本协商开辟道路

我建议你看看LinkedIn的基础设施,看看他们是如何构建自己的移动应用程序的(是的,他们不使用ASP.NET,但架构模式仍然合理)


我的2c

@Aliostad的观点很好,我建议你阅读他的博客文章。如果您只关心RPC,那么WCF WebHTTP应该适合您。。。另外,请看一下用于WCF版本控制的Web API,最简单的方法可能是基于路径的(
https://host/service/1.0
,或
http://host/service/2012-05-11
)。此外,您可能不应该将web api包装在WCF周围,两者都应该是围绕业务逻辑包装的“服务层”。