我有一个简单的WCF需求 - 基本上是单独运行的客户端和一个真正的客户端/服务器服务器。
WCF帮助我们解耦服务层并实施SOA方法以进行扩展。
我们在服务器上执行的操作(每次调用/多个并发)正在写入数据库,然后为另一个可立即使用的系统执行某些IO - 但这可能会随着(未知)需求的构建而改变。
速度:我们需要尽可能快速地提供服务:1秒就可以了 - 2很慢 - 有些错误需要立即发回。
我正在考虑使用服务器异步模式,队列(MSMQ),Azure,以允许服务方法快速排队和返回。注意但是,某些处理可能在WCF服务(db write)中处于“在线”状态,并立即返回响应/错误,其他处理可能处于脱机状态(IO)。缺点:如果存在show-stopper错误并且设计和开发相应地缩放,则需要一种方法来回调客户端。
i)虽然WCF允许服务,但我认为该技术提供了进程间通信通道,并且实际的服务操作可能应该在win服务中运行。例如。 WCF写入一个长时间运行的服务轮询和获取的数据库。随着系统变得越来越大,一些操作可能是真正的火灾并忘记长时间运行 - 完成或需要几小时后。我们可以从即时循环中取出这些。这是真正的脱钩,即使它减慢了我们的速度。 WCF方法无法传递给服务,除非它正在调用另一个WCF服务并且无法调用Windows服务!
从架构的角度来看,是否可以完成某些操作并返回,而其他操作则传递给真正的总线或服务(通过某种机制)?我是否过度设计了这个?
ii)由于db和IO的所有操作最多需要1或2秒,我觉得我可能只是从客户端调用服务aysnc并等待它返回然后编组回客户端UI。这也很简单。从长远来看,这可能是一个错误的决定,但话虽如此,所有服务层操作都将处于单独的dll中,以便其他服务可以调用这些服务以便以后扩展。方法调用可以标记为立即或队列进行处理,比如说。
思想
答案 0 :(得分:0)
从架构的角度来看,是吗? 可以完成一些操作 并返回,其他人传递给真实 公共汽车或服务(通过某种机制)?上午 我过度设计了这个?
没关系,一切都取决于详细的要求。
思想#1
让操作返回唯一的请求ID和一个按请求ID提供状态的操作。
思想#2
如果在X秒或请求ID内完成操作,则返回结果。