我应该把什么类型的网络服务放在一起?

时间:2010-04-19 21:53:21

标签: c# web-services visual-studio-2010

我想使用Visual Studio编写Web服务。该服务需要支持某种类型的身份验证,并且应该能够通过简单的HTTP GET请求接收命令。输入只是带有一些参数的方法调用,响应将是简单的状态/错误代码。我的直觉是使用ASP.NET Web服务,但这不是C#4.0中的一个选项,它让我想知道我是否应该使用更新的东西。我已经研究过WCF,但似乎这需要在客户端运行一个应用程序 - 有没有办法通过访问URL来查询WCF主机?

身份验证也很重要。开发我自己的小身份验证系统似乎是一个坏主意 - 我已经读过它太容易搞砸了。使用像这样的Web服务进行身份验证的标准方法是什么?

我很想查阅关于此的所有细节并自己学习,但我真的不知道从哪里开始。一些方向将不胜感激!

1 个答案:

答案 0 :(得分:1)

对于通过GET接收命令的简单HTTP服务(你应该考虑使用POST ...)我会使用直接的ASP MVC,而不是真的 '网络服务'。 WCF希望引导您走向SOAP的道路,您的客户将永远诅咒您。 RESTful WCF也是另一种选择,但它仍然看起来有点过分。

对于身份验证,您有两种可行的身份验证方案:

  • Windows集成安全性,仅当客户端位于Intranet内或与VPN或DirectAccess解决方案连接时才有效
  • HTTP摘要,ASP身份验证模式支持不足(仅支持针对Active Directory林用户群进行身份验证)。

使用Windows身份验证,您无需对服务器端代码执行任何操作,只需标记web.config <authentication mode="Windows" />即可。大多数用户代理都了解“Windows”身份验证。将服务的客户编程为使用Windows身份验证也很简单,只需将请求的Credentials设置为当前用户DefaultCredentials即可。

使用摘要式身份验证服务器将挑战用户代理进行身份验证,但不幸的是,正如我所说,ASP验证仅适用于验证受信任的NT域。客户端虽然不需要在Intranet中(客户端和服务器之间没有NTLM SSPI交换)。对客户进行编程非常容易,在.Net中只需将requet凭证设置为正确初始化CredentialsCache

CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"),"Digest", new NetworkCredential(UserName,SecurelyStoredPassword,Domain));
...

request.PreAuthenticate = true;
request.Credentials = myCache;

在请求之间重用缓存很重要,否则客户端会在每次调用时进行两次往返。

理论上,您还可以拥有第三个身份验证路径:全双工SSL。但是,客户端证书部署的“微不足道”问题使得这种替代方案对于任何没有完全预安装的企业PKI的人来说都是死路一条。