2014-12-02 70 views
0

我开始使用.net和wcf服务,很抱歉,如果我所问的是错误的或者是有缺陷的。顺便说一句,对不起我的英语。WCF服务IIS为外部客户建立用户登录服务

我想建立几个WCF服务托管在IIS上,因特网客户端可以用他们的用户名/密码(存储在数据库中的信息)登录。当他们登录后,他们可以访问他们的信息,查看他们的私人文件,更改他们的个人资料以及与他们的帐户相关的更多操作。

那么,在asp.net中,如果我在成功登录后获得会话,则可以构建像“GetMyDocs”这样的服务,并且我知道“谁是”,只需检查会话ID时存储的会话用户名,他的会议没有超时。但我注意到WCF服务是无状态的,所以这似乎我必须在执行服务之前发送所有请求中的用户名/密码并在数据库中检查它们...总是!?后来,如果我想构建一个客户端桌面/ Android/iOS应用程序,我将使用这些服务。然后,他们可以在成功登录后通过这些应用程序管理他们的个人和私人数据。

我该如何处理? 是WCF服务的路要走还是WCF不是一个好的选择呢? 我如何处理用户标识与WCF?因为我的所有服务都链接到用户,并且“GetMyDocs”,“SaveNewConfig”,“PayItem”...需要识别谁在呼叫。

在此先感谢!问候!

回答

0

,但我注意到,WCF服务是无状态

这种说法是一种错误。因为您可以在启用状态的情况下轻松创建“基于WCF的”Web服务。此外,国家是一个如此广泛的术语,在这里不值得讨论。例如,你可以使用会话状态与WCF服务,或者你可以在服务的InstanceContextMode属性设置为下列之一:

  • PerCall
  • PerSession

当然,这一切都取决于你如何配置服务本身。

如果你的服务需要由不同的客户端使用,您应该使用OAuth 2.0或类似的东西一起实现RESTful服务考虑在那里你可以验证使用Basic Authentication header或认证成功后发出access token的请求。

+0

但我的WCF服务将返回与用户相关的不同数据。当所有用户的数据相同而不是个人用户时,我认为应该使用RESTful服务。对不起,如果我错了。 我已经阅读过许多博客/文章,WCF服务更适合perCall和int,大多数情况下这不应该改变。我现在有点困惑:( – Jrm 2014-12-02 10:50:05

+0

'我认为当数据对所有用户都是相同的而不是个人用户时应该使用RESTful服务'这是一个虚假的声明 – Leo 2014-12-03 03:37:26

+0

似乎我需要阅读更多文档:P感谢您的支持 – Jrm 2014-12-03 07:57:12

0

有很多方法可以为WCF服务提供身份验证。其中之一是通过使用会话(basicHttp不支持会话,您必须使用wshttp或任何支持会话的其他传输)。但是,启用会话是一项巨大的开销,只是为了避免在每个请求上发送证书。

会话会降低可扩展性,但如果您不担心它,这是一个选项。

+0

但是...每次检查查询我的数据库的凭证都是很大的开销,不是吗?我读过WCF中的会话不像ASP.net会话那样按照请求存储数据。 感谢您的回复,但我很抱歉,仍然不知道如何处理我的问题... – Jrm 2014-12-02 10:33:21