Gat*_*ats 8 c# asp.net wcf soa wcf-4
我只使用WCF进行数据服务(即应用程序内部,非常精简,没有会话状态等),以保持我们的Web应用程序的可扩展性.
我们需要为我们当前正在传递的每个服务调用提供一些公共属性.对于每个调用具有单个请求对象并不理想,因为超出这些常见属性,其余的是非常多样的并且在开发期间经常变化.
目前我正在考虑使用自定义标头和clientmessageinspector来设置值.对于这种情况,这是最简单的推荐方法还是有更好的方法?
更多详情..
下面的红点是我不确定正确的方法(或如何去做).

发送了什么
发送的数据是一组简单的id(3或4用于userid,clientid等) - 所有这些ID都会对安全性和性能产生影响(在某些情况下,它决定了要访问的数据库).
我们还将扩展它以获得更复杂的权限 - 不需要Windows工作者.
调用者将是一个Web应用程序,它们来自会话对象,或者是一个手动填充这些应用程序的Windows服务工作者.
当前的思考
理想情况下,调用者工作流的getinstance会自动使用会话对象填充这些属性,还是使用windows服务调用(不同的构造函数?)手动填充.
然后,我们将确保这些参数始终可用,无需任何考虑或在整个代码中没有常量引用,以便在调用它的每个函数上构造契约.我们目前有很多服务调用(由于应用程序的规模/复杂性,而不是由于糟糕的工程:)),因此这扩展到复杂的权限,以自我文档的方式强制执行规则变得有点困难.
从概念上讲,会话是你在应用程序中处理这个问题的地方,但服务实际上只是一个数据访问层(具有视图映射,页面调度和来自存储库调用的最后调用安全性)所以我们不需要那种重复或复杂性,只包括要包含在查询中的关键标识和权限字段.
问题
这感觉非常像我们应该对调用的标题做的事情,因为我们总是需要这些字段,但我不确定set和get应该位于端点和客户端接口的生命周期中的哪个位置.我也很高兴错了.
我已经应用了类似的架构;基本上每个客户端调用都需要携带一些关于要选择哪个数据库的信息,标识符等。在服务器端,这些参数将被自动处理并存储在字典中。
我创建了一个通用代理类来包装客户端代理,以便向每个服务调用添加相关标头。每个需要调用服务的开发人员都会在调用中使用这个通用代理类。
在服务端,我实现了DispatchMessageInspector作为端点行为,其中数据从请求标头中提取并存储在字典中。该字典在OperationContext () 的扩展内部初始化IExtension<OperationContext>,并且在请求处理期间可用。
请注意,服务的实例上下文模式是PerCall。
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |