标签: soa

如果未连接到会话,拦截 NHibernate 延迟加载行为以返回 null?

这似乎应该是一件显而易见的事情,但我一直在寻找答案几个小时,但没有成功。

我正在使用 NHibernate 来持久化域模型,其中有一个服务层为 ASP.NET MVC 前端提供服务(“服务层”目前只是一个标准类库,但将来可能会转换为 WCF)。Web 应用程序请求它想要的数据并指定它需要的域对象上的集合,服务层接受请求,加载对象和所需的集合(使用延迟加载)并将对象传回使用 AutoMapper 转换的位置到视图模型友好表示。

我想要做的是加载所需的集合,从会话中分离对象并将其传递给前端。但是,当 AutoMapper 尝试映射对象时,这会导致异常,因为它正在尝试访问尚未初始化的集合并且会话不再可用。我可以让对象保持连接,但在这种情况下,AutoMapper 转换最终导致对象上的所有属性无论如何都被延迟加载,如果我们沿着 WCF 路线走,这将不是一个选项。

我想要做的是改变这种行为,这样当集合没有连接到会话时,它不会抛出异常,而是返回 null(或者更好的是空)。这是 Entity Framework V1 中的默认行为(不可否认,它没有执行自动延迟加载),我之前使用过它,但我找不到在 NH 中执行此操作的方法。

有任何想法吗?我在这里走错路了吗?

编辑-为了更清楚地了解我要实现的目标,在访问集合属性时,我想要这种行为:

连接到会话:正常延迟加载集合。
没有会话:属性为空(而不是抛出异常)

更新 - 在Billy McCafferty 的这篇文章之后,我设法使用 IUserCollectionType 实现了一个解决方案,该解决方案到目前为止似乎有效。不过,我没有像他那样使用提供的 PersistentGenericBag,而是必须创建新类型,以在未连接到会话时更改行为。它并不完美,需要一些非常丑陋的映射,但至少我不需要接触我的域对象或客户端映射来让它工作。

c# nhibernate soa

6
推荐指数
1
解决办法
1301
查看次数

事件驱动架构的 API 网关

我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如 Kafka)相互连接的新服务。

下一阶段是创建 API 端点,以便通过 Api 网关在移动应用程序和微服务之间进行通信。

开发 API 网关以向/从微服务传输数据的好解决方案是什么?

  1. 使用消息系统作为请求-回复之一(将 API 网关上的请求转换为消息命令,等待来自带有状态或必要数据的消息系统的响应)?
  2. 在必要的微服务上创建 REST 端点(例如使用REST.li)以通过网关发送或获取数据;使用消息系统根据微服务产生的事件来保持数据的一致性?

感谢您的建议和一些想法

rest soa event-driven microservices

6
推荐指数
1
解决办法
1335
查看次数

从表示层进行服务层调用

我必须选择一种技术来连接我的应用程序/表示层(基于Java)和服务层(基于Java).基本上从业务代表对象中查找适当的Spring服务.

那里有很多选择让我很困惑.以下是我缩小到但不确定的选项..

  • 春季RMI

  • Apache Camel

  • Apache ServiceMix(ESB)

  • Iona FUSE(ESB)

这是我想知道的

  1. 如果您已经(或评估过)其中任何一项,您认为哪种选择更合适?(并告诉我为什么:)不会有害
  2. 我还应该关注其他技术吗?
  3. 截至目前,我没有看到应用程序和服务层正在分发,但我不想在将来排除这种可能性.设计提供这种灵活性是一个好主意吗?

任何帮助都会有用.谢谢!

java soa spring esb java-ee

5
推荐指数
1
解决办法
1699
查看次数

使用WCF + IOC Structuremap的SOA体系结构

我对像StructureMap这样的DI容器有点新,我用asp.net mvc应用程序已经用了很短的时间.现在,我正在拆分我的架构,它将拥有一个WCF服务层和一些消费者,如ASP.NET MVC应用程序,Silverlight应用程序和Winfors/WPF应用程序.当我使用带有asp.net mvc的SM时,我已经通过asp.net mvc的应用程序启动初始化了IOC,现在,对于许多项目使用我无法想象IOC配置应该位于的好地方.我也想在服务层制作DI(注入存储库).

在这种情况下,我在哪里加载我的IOC配置以及我将如何在整个项目中使用(比如只在asp.net mvc应用程序中需要控制器工厂)?

structuremap asp.net-mvc wcf soa

5
推荐指数
1
解决办法
1486
查看次数

我的团队应该如何决定3层和2层架构?

我的团队正在讨论我们开展项目的未来方向.一半的团队相信纯粹的3层架构,而另一半则倾向于采用双层架构.

项目假设:

  1. 企业业务应用
  2. 用户和数据库之间需要业务逻辑
  3. 必要的数据验证
  4. 面向服务(更喜欢RESTful服务)
  5. 多年维护计划
  6. 支持数百名用户

3层团队的优惠:

  1. 持久层<==>域层<==> UI层
  2. 至少持久层和域层之间的服务边界.域层可能在它之间具有服务边界.
  3. 每层之间的翻译(清洁DTO分离)
  4. 除非我们能够找到创意而优雅的自动化,否则手动持久

2层团队的优惠:

  1. 实体框架+ WCF数据服务层<==> UI层
  2. 业务逻辑保留在WCF数据服务拦截器中
  3. 层之间的最小转换 - 有利于更快的编码

这就是高级别的论点.我们应该考虑哪些因素?您对这两种方法有什么经验?

.net architecture soa

5
推荐指数
0
解决办法
333
查看次数

WS安全性涉及的概念?

任何人都可以简要解释一下WS安全性所涉及的概念,以保护肥皂免受中间网络服

security websphere soa ws-security web-services

5
推荐指数
2
解决办法
644
查看次数

ColdFusion中的SOA风格架构?

公司内部系统的后端变得越来越复杂,我想探索做SOA风格架构而不是沉重的单片系统的想法.我应该从哪里开始?

我是SOA的新手.这是指个人CF实例,它们通过远程Web服务调用相互通信?如何处理诸如错误处理和服务器中断之类的事情?如果ESB的每个部分都在ColdFusion中,ESB是否会对架构有益?

DB层怎么样?他们应该共享一个巨大的数据库,还是应该自己以自己的方式存储?

谢谢

coldfusion service soa esb coldfusion-9

5
推荐指数
1
解决办法
703
查看次数

ESB for Python?

在工作中,我们正在讨论选择现成的全栈ESB(企业服务总线 - http://en.wikipedia.org/wiki/Enterprise_service_bus),而不是围绕AMQP系统(例如RabbitMQ).

部分关注点是我们的生态系统是PHP尽可能快地向Python移动,我们已经拥有的API都以JSON方式传递消息.ESB和"SOA解决方案"上的搜索空间确实受到严重污染; 或者这不是Python Thing(tm).因此我在这里问:似乎我们所考虑的所有全栈ESB解决方案主要集中在集成基于SOAP的组件上.这似乎是我们可能不想做的很多双重包装和解包的消息.另外,如果可以的话,我们真的想用Python编写我们的服务到ESB适配器.

我应该注意到PHP/Python生态系统是内部的 - 我们的许多客户都是使用我们的应用程序集成的大型单片企业软件的相当隐藏的组织.对于面向客户的API,他们会对SOAP,XML-RPC等感到满意.我们已经有了请求.因此,在边界,我们最终可能最终提供基于JSON和基于SOAP的服务; 只是没有内部.

tl; dr:有没有人喜欢使用Python应用程序的全栈ESB?那个与你合作过的不受欢迎的人怎么样(无论如何,它有多可怕)?你认为包装像RabbitMQ这样的东西对于PHP/Python生态系统来说更好吗?

python soa esb amqp rabbitmq

5
推荐指数
1
解决办法
6870
查看次数

SOAP over SMTP/JMS的任何用例?

我经常使用SOAP over HTTP来实现迄今为止运行良好的Web服务,而这只是我们留下的唯一选择.

我想知道如果您在需要SOAP over SMTP或SOAP over JMS类型的通信的项目中遇到过用例/场景?我只是想了解使用SMTP或JMS与SOAP的用途?

rest soa soap web-services jax-ws

5
推荐指数
1
解决办法
462
查看次数

服务发现,负载平衡和连接池方法

当针对在AWS等云上部署的大型系统使用SOA时,可以使用两种方法进行服务交互。

  1. 将每个服务群集放在内部Elb后面。客户端与相应的elb建立连接池,而elb进行循环平衡。

  2. 使用netflix eureka之类的服务发现方法。

当前,我们正在使用第一种方法,其中每个服务群集都位于内部elb后面,并且客户端通过elb进行通信,因此每个客户端实例仅需维护1个池,即与elb端点。

对于第二种方法,我有以下疑问。

  1. 迁移到服务发现和智能客户端体系结构(服务客户端知道所有服务实例(通过eureka服务或同等服务)并且内部负载平衡)是否有好处?
  2. 在以上情况下,连接池如何工作?当前,每个客户端实例必须维护1个连接池,即与相应服务的Elb连接的池。但是对于富客户端,每个客户端将具有所有服务实例终结点以直接与之通信。在每个请求上建立连接将不是高效的,我想每个客户端拥有如此多的连接池(每个服务实例1个)是过大的。

在以上两个问题上需要输入/建议。

soa connection-pooling load-balancing microservices

5
推荐指数
1
解决办法
781
查看次数