none
适合多平台的技术选型 RRS feed

  • 问题

  • 我现在想做一个产品,大致思路是这样 的,
    一个服务端,
    客户端有很多种:WinForm、Web、IOS、Android、WP8 ,同时要支持 QQ的OpenID 登录,同时还要开放API,供第三方人员开发。

    其实这种框架目前中国有很多,比如 微博、金山快盘 等,都是这种做法。

    我现在不知道这样一套系统应该选择哪些技术。

    我初步想了下:
    1,如果要适合这么多客户端,数据格式这块至少要用 JSON或 XML,鉴于JSON更轻量,应该首选 JSON 
    2,支持QQ或者微薄的单点登录,应该是OpenID 技术;支持API 开放,应该是 OAuth2.0 技术,应该引用 DotNetOpenAuth 组件
    3,对于服务端的技术选型是最纠结的,WCF 其实是我最熟悉的,但是在客户端第一次连接的时候非常慢,所以我觉得WCF 不太适合;
          WCF Data Service 因为是开放数据类型,我觉得数据库结构开放出来不是一件好事,我看到 金山快盘、QQ 都没有开放出来,再者全是用EF,我觉得控制单个字段不灵活(可能是我对EF理解不够),所以我觉得WCF DATA SERVICE 也不太适合
          排除上面两个,微软平台只有 ASP.NET WEB API 了,这个是新出来的东西,我看到只能走HTTP,很轻量,也没有用过,不知道ASP.NET WEB API能不能承担这么大的压力,或者适不适合做这样的系统?

    这只是我个人的见解,可能描述的不对,请知道的坛友指点一下,非常感谢!

    相信自己,坚持下去。

    2013年8月30日 7:16

答案

  • 身份认证和授权:采用 Claim-based 的方案;

    服务端:采用 Claim-aware 的 Asp.Net MVC 和 WCF Service;

    JSON 或 XML 不必纠结,因为 Asp.Net MVC 和 WCF 可以同时支持两种,客户端通过 http header 来自有选择。

    WCF 有个优势,可以通过配置实现 HTTP、TCP多种协议绑定,那么在高性能或需要数据推送的场景下,可以采用 TCP 协议。

    关于 WCF 客户端第一次连接非常慢的问题,我建议你仔细的排查下问题,把整个过程的时间消耗都测试出来,找出权重大的部分,然后解决这部分的问题,优化你的服务结构和客户端代码。根据我的经验,合理的服务划分、设计和手写的 WCF 客户端并没有你提到的“非常慢”的问题。

    谢谢您的回复!

    我按照您的思路, “身份认证和授权:采用 Claim-based 的方案” 应该是指 Windows Identity Foundation,我研究了下,我觉得它只适合 WEB 认证,WINFORM 、IOS、 Android 不太适合,或者说它列适合MS 平台,不知道我这样理解对不对?

    WCF 确实有优势,WINFORM 客户端可以用 TCP 协议,这样性能更高。

    至于慢的问题,不知道是不是MS 发布了更新,记得两年前客户端第一次连接服务端很慢,今天测试只需要 150ms-300ms,这个速度可以接受。

    如果有更好的方案,还请告知一下,谢谢!

    WIF 适合需要联合身份认证的场景,也就是说你提到的它都能适配,建议你深入的学习下,简单的你可以在 Windows Azure 上为身份认证配置Facebook、google 等的 OAuth 认证机制。你提到的 web,可能你只看到了 web 交互的重定向流程,在基于客户端技术的场景下,重定向是被忽略的,客户端会直接同认证接口交互,这个过程很好理解,你只要把基于重定向的流程从场景中拿掉就行,也就是说把重定向的自动过程改为你的客户端的主动过程。

    编写 WCF 客户端有很多种方式,你可以根据你的需求来选择,比如如果你的服务采用 rest (当然不限于此,实际上是指 http 协议),那么你可以直接通过 webclient、httpwebrequest,甚至是你自己写的 http client 来消费 wcf 服务,当然在具有复杂的消息安全模式下,此方法需要你额外的ws-security知识来应对,但是我们通常不这么做。

    对于一般的 wcf 代理类,通常可以通过手写代码来优化客户端,你可以下载微软的 StockTrader 示例项目,该项目有关于此的完整示例。

    2013年9月2日 2:44
  • 你好

    关于你的问题,在服务端这块我是这样想的: WCF作为内部服务使用,Web API作为公开的服务API,数据格式自然是目前比较相对广的json了,关于验证和授权工作这个可以参考其他平台的做法,wcf和webapi本来也有提供这方面的支持。

    至于支持第三支持登录的问题,这个跟你本身的服务端的设计不存太多的依赖关系

    2013年9月5日 1:35

全部回复

  • 你好!

         我也面对过同样的问题,我的看法是既然需要适应这么多的客户端,唯一勉强可用的是WCF/Web Service。另外,你也可以通过多种方式暴露接口,来提升性能。


    周雪峰

    2013年8月30日 9:00
    版主
  • 身份认证和授权:采用 Claim-based 的方案;

    服务端:采用 Claim-aware 的 Asp.Net MVC 和 WCF Service;

    JSON 或 XML 不必纠结,因为 Asp.Net MVC 和 WCF 可以同时支持两种,客户端通过 http header 来自有选择。

    WCF 有个优势,可以通过配置实现 HTTP、TCP多种协议绑定,那么在高性能或需要数据推送的场景下,可以采用 TCP 协议。

    关于 WCF 客户端第一次连接非常慢的问题,我建议你仔细的排查下问题,把整个过程的时间消耗都测试出来,找出权重大的部分,然后解决这部分的问题,优化你的服务结构和客户端代码。根据我的经验,合理的服务划分、设计和手写的 WCF 客户端并没有你提到的“非常慢”的问题。

     

    2013年8月30日 9:14
  • 身份认证和授权:采用 Claim-based 的方案;

    服务端:采用 Claim-aware 的 Asp.Net MVC 和 WCF Service;

    JSON 或 XML 不必纠结,因为 Asp.Net MVC 和 WCF 可以同时支持两种,客户端通过 http header 来自有选择。

    WCF 有个优势,可以通过配置实现 HTTP、TCP多种协议绑定,那么在高性能或需要数据推送的场景下,可以采用 TCP 协议。

    关于 WCF 客户端第一次连接非常慢的问题,我建议你仔细的排查下问题,把整个过程的时间消耗都测试出来,找出权重大的部分,然后解决这部分的问题,优化你的服务结构和客户端代码。根据我的经验,合理的服务划分、设计和手写的 WCF 客户端并没有你提到的“非常慢”的问题。

     

    谢谢您的回复!

    我按照您的思路, “身份认证和授权:采用 Claim-based 的方案” 应该是指 Windows Identity Foundation,我研究了下,我觉得它只适合 WEB 认证,WINFORM 、IOS、 Android 不太适合,或者说它列适合MS 平台,不知道我这样理解对不对?

    WCF 确实有优势,WINFORM 客户端可以用 TCP 协议,这样性能更高。

    至于慢的问题,不知道是不是MS 发布了更新,记得两年前客户端第一次连接服务端很慢,今天测试只需要 150ms-300ms,这个速度可以接受。

    如果有更好的方案,还请告知一下,谢谢!

    • 已编辑 毅无涯 2013年8月30日 14:35 引用
    2013年8月30日 14:33
  • 你好!

         我也面对过同样的问题,我的看法是既然需要适应这么多的客户端,唯一勉强可用的是WCF/Web Service。另外,你也可以通过多种方式暴露接口,来提升性能。


    周雪峰

    谢谢您的回复!

    我现在觉得用WCF 可能更适合我,因为更外两种技术 我不太熟悉。可是面对这么多种 终端,这个登录认证该怎么处理呢?还请指点一下,谢谢!


    相信自己,坚持下去。

    2013年8月30日 14:37
  • 身份认证和授权:采用 Claim-based 的方案;

    服务端:采用 Claim-aware 的 Asp.Net MVC 和 WCF Service;

    JSON 或 XML 不必纠结,因为 Asp.Net MVC 和 WCF 可以同时支持两种,客户端通过 http header 来自有选择。

    WCF 有个优势,可以通过配置实现 HTTP、TCP多种协议绑定,那么在高性能或需要数据推送的场景下,可以采用 TCP 协议。

    关于 WCF 客户端第一次连接非常慢的问题,我建议你仔细的排查下问题,把整个过程的时间消耗都测试出来,找出权重大的部分,然后解决这部分的问题,优化你的服务结构和客户端代码。根据我的经验,合理的服务划分、设计和手写的 WCF 客户端并没有你提到的“非常慢”的问题。

    谢谢您的回复!

    我按照您的思路, “身份认证和授权:采用 Claim-based 的方案” 应该是指 Windows Identity Foundation,我研究了下,我觉得它只适合 WEB 认证,WINFORM 、IOS、 Android 不太适合,或者说它列适合MS 平台,不知道我这样理解对不对?

    WCF 确实有优势,WINFORM 客户端可以用 TCP 协议,这样性能更高。

    至于慢的问题,不知道是不是MS 发布了更新,记得两年前客户端第一次连接服务端很慢,今天测试只需要 150ms-300ms,这个速度可以接受。

    如果有更好的方案,还请告知一下,谢谢!

    WIF 适合需要联合身份认证的场景,也就是说你提到的它都能适配,建议你深入的学习下,简单的你可以在 Windows Azure 上为身份认证配置Facebook、google 等的 OAuth 认证机制。你提到的 web,可能你只看到了 web 交互的重定向流程,在基于客户端技术的场景下,重定向是被忽略的,客户端会直接同认证接口交互,这个过程很好理解,你只要把基于重定向的流程从场景中拿掉就行,也就是说把重定向的自动过程改为你的客户端的主动过程。

    编写 WCF 客户端有很多种方式,你可以根据你的需求来选择,比如如果你的服务采用 rest (当然不限于此,实际上是指 http 协议),那么你可以直接通过 webclient、httpwebrequest,甚至是你自己写的 http client 来消费 wcf 服务,当然在具有复杂的消息安全模式下,此方法需要你额外的ws-security知识来应对,但是我们通常不这么做。

    对于一般的 wcf 代理类,通常可以通过手写代码来优化客户端,你可以下载微软的 StockTrader 示例项目,该项目有关于此的完整示例。

    2013年9月2日 2:44
  • 你好

    关于你的问题,在服务端这块我是这样想的: WCF作为内部服务使用,Web API作为公开的服务API,数据格式自然是目前比较相对广的json了,关于验证和授权工作这个可以参考其他平台的做法,wcf和webapi本来也有提供这方面的支持。

    至于支持第三支持登录的问题,这个跟你本身的服务端的设计不存太多的依赖关系

    2013年9月5日 1:35
  • 身份认证和授权:采用 Claim-based 的方案;

    服务端:采用 Claim-aware 的 Asp.Net MVC 和 WCF Service;

    JSON 或 XML 不必纠结,因为 Asp.Net MVC 和 WCF 可以同时支持两种,客户端通过 http header 来自有选择。

    WCF 有个优势,可以通过配置实现 HTTP、TCP多种协议绑定,那么在高性能或需要数据推送的场景下,可以采用 TCP 协议。

    关于 WCF 客户端第一次连接非常慢的问题,我建议你仔细的排查下问题,把整个过程的时间消耗都测试出来,找出权重大的部分,然后解决这部分的问题,优化你的服务结构和客户端代码。根据我的经验,合理的服务划分、设计和手写的 WCF 客户端并没有你提到的“非常慢”的问题。

    谢谢您的回复!

    我按照您的思路, “身份认证和授权:采用 Claim-based 的方案” 应该是指 Windows Identity Foundation,我研究了下,我觉得它只适合 WEB 认证,WINFORM 、IOS、 Android 不太适合,或者说它列适合MS 平台,不知道我这样理解对不对?

    WCF 确实有优势,WINFORM 客户端可以用 TCP 协议,这样性能更高。

    至于慢的问题,不知道是不是MS 发布了更新,记得两年前客户端第一次连接服务端很慢,今天测试只需要 150ms-300ms,这个速度可以接受。

    如果有更好的方案,还请告知一下,谢谢!

    WIF 适合需要联合身份认证的场景,也就是说你提到的它都能适配,建议你深入的学习下,简单的你可以在 Windows Azure 上为身份认证配置Facebook、google 等的 OAuth 认证机制。你提到的 web,可能你只看到了 web 交互的重定向流程,在基于客户端技术的场景下,重定向是被忽略的,客户端会直接同认证接口交互,这个过程很好理解,你只要把基于重定向的流程从场景中拿掉就行,也就是说把重定向的自动过程改为你的客户端的主动过程。

    编写 WCF 客户端有很多种方式,你可以根据你的需求来选择,比如如果你的服务采用 rest (当然不限于此,实际上是指 http 协议),那么你可以直接通过 webclient、httpwebrequest,甚至是你自己写的 http client 来消费 wcf 服务,当然在具有复杂的消息安全模式下,此方法需要你额外的ws-security知识来应对,但是我们通常不这么做。

    对于一般的 wcf 代理类,通常可以通过手写代码来优化客户端,你可以下载微软的 StockTrader 示例项目,该项目有关于此的完整示例。


    谢谢,我准备使用 WEB API

    相信自己,坚持下去。

    2013年9月9日 8:29
  • 你好

    关于你的问题,在服务端这块我是这样想的: WCF作为内部服务使用,Web API作为公开的服务API,数据格式自然是目前比较相对广的json了,关于验证和授权工作这个可以参考其他平台的做法,wcf和webapi本来也有提供这方面的支持。

    至于支持第三支持登录的问题,这个跟你本身的服务端的设计不存太多的依赖关系


    谢谢,我准备用 WEB API.

    相信自己,坚持下去。

    2013年9月9日 8:29