我不太确定如何以良好的代码方式处理我所拥有的场景。
我工作标准的基本原则是:
这意味着我必须能够在整个应用程序中拥有一个代理客户端实例。我还必须能够处理异步调用,因此客户端不会挂断,但同时确保它们已完成。
我的技术理解是WCF足够有限,不知道某些场景是否会按预期工作。所以我要列出我的不确定性:
所以我在第一次迭代中尝试解决其中一些问题。
我仍然遇到的问题当然是如何处理客户端的故障状态。我现在假设我可以重新安装客户端并拯救会话,或者我实际上可以将其重新设置为原样。我现在需要在每次使用相同的新实例注入它时重新安装它。
所以我可能最好创建一个包装客户端的ClientManager类。这样我就可以注入这个ClientManager并在需要时重新安装在他内部。我想我应该让他向外暴露,以便能够进行方法调用,但如果我能以某种方式错误地处理他内部会很好。我只是很难测试我的方法,我不确定它是否能在集成中正常工作,因为我不了解WCF,协同程序和线程的所有内部工作原理。
有没有人在这些事情上有更多的经验,可以给我一些指示或者至少告诉我WCF在这些情况下(每次会话)如何工作以及我做错了什么以及什么是正确的。< / p>
答案 0 :(得分:1)
WCF支持开箱即用的会话,因此我建议从this MSDN文章开始。
在非常高的级别,首先要在SessionMode=SessionMode.Required
中设置ServiceContract
。然后,在OperationContract上设置IsInitiating=True
和IsTerminating=True
属性,以标记每个会话的开始和结束。
但请注意,WCF默认将并发会话限制为16以阻止DOS attacks,但您始终可以将该值上调。此外,只要主机(IIS / Windows服务/其他)不被回收,您就会意识到会话是有效的。
在相关的说明中,我之前使用过WCF Durable Services - 这意味着在数据存储中保留WCF服务的状态(默认为SQL Server)。当然,这里有一个表现。建议阅读further以确定这是否适合您。
希望这有帮助。