[英]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.