繁体   English   中英

如何在 Xamarin.Forms 中处理 WCF Duplex?

[英]How to handle WCF Duplex in Xamarin.Forms?

一点背景:我正在构建一个简单的回合制游戏。 有一个服务器托管 WCF 服务和使用Xamarin.Forms (带有 PCL 库)构建的客户端。 所以我想用双工通道构建非常简单的“请求-响应”服务器 - 移动并等待响应(在事件中捕获响应/回调)。 但是...问题是,我在那里看不到 netTcp 绑定或任何双工/双绑定。 只有BasicHttpBinding

我的代理 PCL 库目标:

  • .NET 框架 4.5
  • ASP.NET 核心 1.0
  • 视窗 8
  • Windows Phone Silverlight 8
  • 安卓系统
  • Xamarin.iOS
  • Xamarin.iOS(经典)

我的问题是:如何创建基于事件的服务架构(与回调的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM