Hus*_*lil 3 nhibernate orm wcf web-services fluent-nhibernate
我目前正在开发一个Web服务,它将用作Perforce服务器的外观.
换句话说,它们不是让客户端直接联系Perforce服务器,而是从Web服务发送和接收消息,而Web服务又将它们转发到Perforce服务器.这种分离主要是出于安全原因(即:客户端永远不能直接访问Perforce服务器).
另一个要求是将Web Service连接到SQL Server数据库.在对ORM进行一些研究之后,我遇到了NHibernate.它似乎具有开发高效Web服务所需的所有功能,例如缓存和延迟加载.
我还发现了Web Service Software Factory 2010,据微软称,它是"一个集成的资源集合,旨在帮助您快速,一致地构建符合众所周知的架构和设计模式的Web服务"
这是我的问题:
我注意到Web Service Software Factory 2010自2010 年以来一直没有更新.如果框架没有保持最新或被弃用,我会犹豫是否使用它.我还注意到它没有为端点提供TCP连接,这是我想用来在Web服务和客户端之间传输数据的协议之一.WSSF的适应性如何?我可以覆盖一些生成的代码吗?
WCF和NHibernate一起工作得很好吗?关于如何同时处理这两种技术,您有什么建议吗?我最关心的是如何在WCF环境中为NHibernate创建会话管理器.
由于性能是Web服务的基础,您是否建议我使用TCP协议而不是HTTP?如果我要使用TCP,那么在WCF中是否有任何方法可以简单地序列化我想要在线路上传递的实体,而不是先将它们转换为SOAP格式?
由于这是我第一次使用WCF和NHibernate,因此手头任务的欢呼复杂性非常艰巨.我已经为每项服务单独配备了一些好的教程,但是我没有找到一个所有这些都在一起工作的教程.
如果您根据自己的技术经验提出任何建议/建议,我将非常感激.
谢谢你的时间,祝你有个美好的一天.
1)Web服务软件工厂可能是您工具箱的有用补充,具体取决于您为项目使用的方法.我建议如果你正在采用契约优先方法进行项目(即你已经有XSD文件用于你的消息,或者你的团队中有人要预先设计你的消息和服务合同)那么WSSF可能有用.
我个人的经验是,工具没有增加太多价值,但你的里程可能会有所不同.但是,如果这是您的第一个严肃的WCF项目,那么该指南值得一读.
2)如果你做得对,NHibernate和WCF可以成为一个梦想的团队.
使用ORM和WCF的最大阻抗不匹配之一是可以从模型中的一个对象导航的对象模型通常很大并且可以快速拖动数百或数千个相关对象.由于延迟加载和NHibernate的强大功能,很容易忽略服务实现对数据库的影响.
因此,我认为最重要的建议是避免通过网络发送/接收域模型对象,并小心设计您的DTO.这迫使您非常明确地考虑您在线上执行(或不执行)的数据以及实际需要导航的关系.也就是说,如果你有一个域对象A(使用NHibernate映射),理想情况下你会有不同的DTO版本支持A的不同客户端场景(例如BriefA,DetailedA,BsAssociatedWithA,PerformTask1OnA,PerformTask2OnA等).当你提出这看起来有点矫枉过正,但从长远来看,它会节省你的时间,并为你提供一个更可预测和可维护的软件.
关于会话管理,有很多方法可以做到这一点,而且非常简单.这是一个很好的起点.
3)DTO的设计对性能也很重要.在仅封装所需数据的DTO与必须满足30种不同场景的膨胀域对象之间可以获得的性能差异可以达到数量级.
还可以使用标准的DataContract/DataMember属性来确保您的DTO可以使用内置的序列化程序.这些都非常快.
WCF的一个奇妙之处在于它能够通过简单的配置更改来转换Web服务的许多方面.从简单HTTP更改为SOAP消息传递,或从文本更改为二进制编码,或从net.tcp更改为http传输都可以通过轻松切换一两个开关来完成.这样可以非常轻松地进行实验并找到满足您要求的最佳配置.我的经验是net.tcp上的二进制编码在大多数情况下都能提供最好的结果,但有太多因素可以简单地假设这对你来说是最好的选择.
祝好运!
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |