2017-01-22 32 views
2

小背景: 我正在構建一個簡單的回合制遊戲。有一臺託管WCF服務的服務器和使用Xamarin.Forms(使用PCL庫)構建的客戶端。所以我想用雙工通道構建一個非常簡單的「請求 - 響應」服務器 - 做出動作並等待響應(捕獲事件中的響應/回調)。但是...問題是,我看不到netTcp綁定或任何雙工/雙綁定那裏。只有BasicHttpBinding如何處理Xamarin.Forms中的WCF Duplex?

我的代理PCL庫目標:

  • .NET框架4.5
  • ASP.NET 1.0的核心
  • 的Windows 8
  • 的Windows Phone 8的Silverlight
  • Xamarin.Android
  • Xamarin .iOS
  • Xamarin.iOS(經典)

我的問題是:我如何使基於事件的服務體系結構(與Callback的WCF雙工通信) - 所以我可以在Xamarin.Forms中使用它?

在人這一點上的色調可能要downvote這個問題(或者已經做到了),所以我給搞什麼名堂已經完成:

我發現票here和大量的抱怨(有和其他地方),Xamarin沒有采取任何關於wcf雙工通信。這看起來並不樂觀。但是,也許你有一些很好的解決方法這個問題?

至於現在,我已經做了這樣的:

public async Task<MyResponse> Start(int id) 
{ 
    MyResponse response; 
    // doing stuff... 
    return await Task.Factory.StartNew(() => response); 
} 

所以,我打電話異步服務,基本上等到返回。由於它是異步的,客戶端的屏幕不會被凍結。我不知道這是最好的解決方案...

最好的解決方案是基於事件的架構(使用回調,因爲你必須等待你的對手)。但我不知道該怎麼做?它甚至有可能嗎?

謝謝,

+0

有一個關於它的討論:[你們可以讓一些團隊成員去更新Xamarin.Android和Xamarin.iOS的WCF嗎?](https://github.com/dotnet/wcf/issues/1688 ) – qakmak

回答

2

WCF開發已被暫停和恢復多次。我不認爲你會看到在這方面完成的工作,因爲REST服務(或者像它構建的框架,比如服務棧)是現代方法而不是WCF。

您可以閱讀沒有計劃支持此項目的列表:http://www.mono-project.com/docs/web/wcf/#components-with-no-plan-to-support(整篇文章提供了更多的歷史到這個爲好)

至於你的問題,有許多方法來接近了轉向基於遊戲的現代服務。一個簡單的例子可能是使用爲此構建的框架。Xamarin.Android有一個回合制多人遊戲包,他們與谷歌播放服務運做:

https://developers.google.com/games/services/common/concepts/turnbasedMultiplayer(您可以向下滾動到Client Implementations支持不僅僅是Android的更多)

也有東西像SignalRhttps://github.com/SignalR/SignalR在您可以創建基於回合的機制。

最後,您還可以對REST服務執行相同的操作。然而,隨着REST服務,您將無法真正捕捉會話狀態,但你可以在有enpoints如意義上的回合制遊戲模式:

/game/<gameID>/turn/<turnID>

因此,你可以一個博弈模型以及玩家輪到的狀態是基於turnID。這真的取決於你基於回合的遊戲的複雜性,但對於象棋/井字棋/岩石剪刀這樣的簡單事物來說,這絕對是可能的。

在等待轉彎的例子中,您可以抓住最近的轉彎並返回輪到它的位置或者這些線上的某個東西。

+0

Thx,問題..當你說「REST」時,你的意思是WCF的BasicHttpBinding?就像我在示例中顯示的異步服務一樣?或者一些ASP網絡服務。我不熟悉什麼科技是今天最現代化的寧靜服務? –

+0

此外,我想保持相同的代碼爲iOS和Android(我使用xamarin.forms)。我已經分離了每個xamarin.forms客戶端使用的pcl。所以,只適用於一個平臺的解決方案對我來說並不好 –

+0

@MarvinLaw Google的'Play Games Services'可以在'iOS'上使用本地幫助包裝(https://developers.google.com/games/services/ios/turnbasedMultiplayer) ,但所有Google的API都可以通過'Rest' apis(所有他們的「本機」包裝器使用)並且可以跨平臺(iOS,Android,Browser,Unity,...)使用:https://開發人員。 google.com/games/services/web/gettingstarted – SushiHangover