3

所以请耐心等待,我是 MVC 和 WCF 的新手。我已经有一组服务 (WCF) 公开了我的 BLL,我正在尝试从我的 MVC.net Web 应用程序中使用这些服务,但我不确定如何在这里执行安全操作。

这些是我的应用程序要求:

  • 能够为 Web 应用程序上的每个用户使用不同的凭据来使用 WCF 服务
  • 我的 BLL (WCF) 需要知道消费者在调用它(现在我只有 MVC 应用程序,但我计划向它添加 iOS 和 Andriod 调用,所以稍后我将向 WCF 端点添加 REST 服务)有什么设计模式吗?(或者我应该只使用soap标头来包含来电显示吗?我应该使用某种来电者密码还是什么?)
  • 我需要一个像令牌或其他东西这样的安全机制,所以我不必在每次调用服务方法(WCF)时传递用户名和密码

到目前为止我所拥有的:

  • WCF 使用证书和自定义用户名验证器。
  • 我已经使用合同接口而不是生成的代理手动编码代理:但我讨厌每次调用 WCF 服务时都必须验证用户名和密码的事实。我怎么能在这里使用代币?想知道在soap 标头上发送的给定令牌是否有效或尚未过期?我已经搜索了很多,没有教程/代码/示例足够清楚,我可以真正开始编码;(
  • 我正在尝试缓存 ChannelFactory 但我应该吗?我的意思是,我需要为每个登录用户的每个合同缓存一个频道工厂;(可以吗?我可以在这里做什么?

提前致谢!

4

1 回答 1

0

您是否应该为每个合同的每个用户缓存 ChannelFactory?

这取决于。有几个考虑因素。实例化通道工厂最多可能需要 70 毫秒。如果您重复执行此操作,如果您没有缓存 ChannelFactory 并在每次用户向您的 MVC 应用程序发出导致控制器操作调用 Web 服务的 http 请求时实例化一个(或多个),您将看到明显的性能下降。这表明缓存 channelFactory 将有利于速度。

另一方面,根据您拥有的用户数量,如果您正在缓存大量通道工厂(例如在静态字典中),您将开始使用大量内存 - 这可能会变成给你一个问题。

您必须决定动态实例化通道工厂(并正确关闭/中止它们及其包含的通道)的成本与增加托管 MVC 应用程序的应用程序池中的内存利用率相比是否太高了。

无论哪种方式,我强烈建议您在部署到生产环境之前分析您的应用程序。

于 2012-12-19T12:09:22.220 回答