[英]How to handle WCF Duplex in Xamarin.Forms?
一点背景:我正在构建一个简单的回合制游戏。 有一个服务器托管 WCF 服务和使用Xamarin.Forms
(带有 PCL 库)构建的客户端。 所以我想用双工通道构建非常简单的“请求-响应”服务器 - 移动并等待响应(在事件中捕获响应/回调)。 但是...问题是,我在那里看不到 netTcp 绑定或任何双工/双绑定。 只有BasicHttpBinding
。
我的代理 PCL 库目标:
我的问题是:如何创建基于事件的服务架构(与回调的 WCF 双工通信) - 以便我可以在 Xamarin.Forms 中使用它?
在这一点上,人们可能想要反对这个问题(或已经做过),所以我展示了已经做过的事情:
我在这里找到了票证,并且有很多抱怨(在那里和其他地方)Xamarin 对 wcf 双工通信无所作为。 这看起来不太乐观。 但也许你有一些很好的解决这个问题的方法?
至于现在,我是这样做的:
public async Task<MyResponse> Start(int id)
{
MyResponse response;
// doing stuff...
return await Task.Factory.StartNew(() => response);
}
所以,我异步调用一个服务,基本上等待它返回。 因为它是异步的,所以客户端的屏幕不会被冻结。 我不确定这是最好的解决方案......
最好的解决方案是基于事件的架构(使用回调,因为您必须等待对手)。 但我不知道该怎么做? 甚至有可能吗?
谢谢,
WCF开发已多次暂停和恢复。 鉴于 REST 服务(或基于它构建的框架,如服务堆栈)是现代方法而不是 WCF,我不相信您会看到这方面的工作。
您可以在此处阅读没有计划支持的项目列表: http : //www.mono-project.com/docs/web/wcf/#components-with-no-plan-to-support (整篇文章给出也有更多的历史)
至于你的问题,有很多方法可以通过现代服务来处理回合制游戏。 一个简单的例子可能是使用为此构建的框架。 Xamarin.Android
有一个回合制多人游戏包,它们随 Google Play 服务一起提供来执行此操作:
https://developers.google.com/games/services/common/concepts/turnbasedMultiplayer (您可以向下滚动到Client Implementations
以支持的不仅仅是 Android)
还有诸如SignalR
https://github.com/SignalR/SignalR 之类的东西,您可以在其中创建基于回合的机制。
最后,您还可以对 REST 服务执行相同操作。 然而,使用 REST 服务,您将无法真正捕获会话状态,但您可以在具有端点的意义上对基于回合的游戏进行建模,例如:
/game/<gameID>/turn/<turnID>
因此,您可以根据turnID
对游戏以及玩家的回合状态进行turnID
。 这实际上取决于您的回合制游戏的复杂性,但对于象棋/井字游戏/剪刀石头布这样的简单事物,这绝对是可能的。
在等待回合的示例中,您可以获取最新的回合并返回轮到哪个玩家或这些行上的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.