对于客户端-服务器应用程序,我想开发一个主要由应用程序本身使用的 Web 服务(目前不打算供第三方使用)。
然而,从长远来看,将 WebService 公开为某种 API 通常是可取的。因此,我已经在考虑选择一种允许“RESTifing”(可怕的词创建,我知道 ;-))在以后轻松实现 Web 服务的技术。
WCF 似乎就在这里,因为它提供了 webHttpBinding 以及其他允许利用 LAN 和 .NET 客户端的绑定。
我现在遇到的问题是关于身份验证:WCF 提供的所有身份验证措施似乎都发生在实际服务的“外部”。但是,我想要一个Login
方法(或者更“RESTful”的方法,如第 2 点所示)。
例如,我想像这样写一个服务:
[ServiceContract]
public interface IUserService
{
[ServiceMember]
[WebInvoke(Method = "POST", WebUri="/Session")]
public void Login(string username, string password);
[ServiceMember]
[WebInvoke(Method = "POST", WebUri="/Users")]
public void Register(RegisterUserParameter parameter);
}
如何将此服务集成到 WCF 中,以便这些方法最好在我的服务项目中的多个子服务上工作?
使用内置 WCF 身份验证时,我需要在进行任何服务调用之前提供用户名和密码。因此,调用其中一个Register
或Login
将失败,因为我没有经过身份验证。
以及如何告诉 WCF 记住当前使用我的服务方法登录的用户?是否有可能在客户端的 WCF 会话中存储诸如会话 cookie 之类的东西?
或者以我尝试的方式在 WCF 下实现身份验证通常是一个坏主意?
我是否应该以一种更复杂的方式与客户端应用程序中的服务通信为代价直接选择 WebAPI?