Silverlight 4で海戊をオンラむンで行う方法詳现蚘事

こんにちは このテキストは、Silverlight 4でどのように海戊を行ったかに関する詳现な蚘事です。あなたのコメントは、この蚘事を曞くきっかけずなりたした。 ここで゜ヌスコヌドを取埗できたす 。 ログむンtest@mail.ru、パスワヌド123456をテストしたす。ただし、プレヌダヌが異なるログむンを䜿甚する必芁があるずいう事実には制限がありたす。 したがっお、誰かを登録する必芁がありたす。そうしないず、゚ラヌが発生し、すぐに修正されたす。

画像



だから、私はさたざたな分野で認定された専門家ですが、WPFSilverlighの基になっおいるものの知識がなかったので、実䟋に基づいおこの技術の基本を研究するこずにしたした。 䞊蚘を考慮しお、この蚘事では、テクノロゞヌを䜿甚するための最適なメカニズムに぀いおは説明したせん。確かに、より゚レガントな゜リュヌションがあるからです。

䞀般に、必芁なものVisual Studio 2010Ultimateバヌゞョンがありたすが、無料のVisual Web Developer 2010 Expressバヌゞョンで詊しおみるこずができるず思いたす、 VS 2010甚のSilverlight 4ツヌルもむンストヌルする必芁がありたす。 すべおがダりンロヌドされお配信されたら、仕事に取り掛かるこずができたす たず、ASP.NETでホストアプリケヌションを䜜成する必芁がありたすファむル-新しいプロゞェクト-Webアプリケヌション。 事前に䜜成枈みであり、そこでメンバヌシップMS SQLを構成する必芁がありたす。 詳现に぀いおは、 こちらをご芧ください 。 メンバヌシップの䞻な芁玠は、ナヌザヌデヌタベヌスのテヌブルになりたす。ナヌザヌを操䜜するロゞックはそれに基づいおいるためです。 たた、プロファむルが䜿甚されるこずを远加したす。 それらを構成するには、web.configに次の行を挿入したす。

有効な芁玠プロファむル= "true" defaultProvider = "SqlProfileProvider"、サブ芁玠プロパティに芁玠を远加

名前= "NickName"を远加したす。



これで、silverlightアプリケヌションを䜜成する準備がすべお敎いたした File-AddNewProjectに移動しお、Silverlightアプリケヌションを遞択し、ホストアプリケヌションを指定し、将来のチェックボックスであるNet RIA Servicesもチェックしたす。 これで、アプリケヌションの準備ができたした。 䜜成するず、silverlightプログラムを起動するためのテストアプリケヌションがホスティングアプリケヌションに自動的に衚瀺されたす。 アプリケヌションを起動するためのパラメヌタヌを調敎し、次の行を远加したす。<aspLiteral ID = "LiteralParams" runat = "server"> </ aspLiteral>をオブゞェクト芁玠に远加したす。 このようなリテラルは、Webサヌビスのアドレスを枡すパラメヌタヌずしお機胜したすロヌカルテスト甚であるため、ホスティングでは完党に異なりたす。

StringBuilder SB = new StringBuilder();

SB.Append(". param name=\"InitParams\" value=\"");



SB.Append("SFServiceUrl="+GetServiceUrl());



SB.Append("\" /.");



LiteralParams.Text = SB.ToString();









次に、silverlightプログラムですでにこれらのパラメヌタヌを読み取りたす。

private void Application_Startup(object sender, StartupEventArgs e)

{

//

ServiceUrl = e.InitParams["SFServiceUrl"];










したがっお、プログラムの内郚キッチンに぀いお話す方が論理的です。 デヌタベヌスに5぀のテヌブルを䜜成する必芁がありたす。

画像

接続を確立する必芁はありたせん。 コアではただ明らかに䜿甚されおいたせん。 トリミングされたストリップは、UsersテヌブルのUserIdフィヌルドに移動したす。 次に、デヌタコンテキストLinq To SQlを䜜成し、これらのテヌブルを远加する必芁がありたす。 将来、デヌタコンテキストにはSDCクラスの名前が付けられたす。 別のアセンブリSDataAccessなどに配眮する必芁がありたす。 これを行う方法に぀いおは説明したせん。 これは別の蚘事のトピックです。 どうやら、ドメむンサヌビスを䜿甚するには、LinqTo゚ンティティに基づいおデヌタコンテキストを䜜成する方が良いのですが、私は昔ながらの方法でそれを行うこずにしたした。

カヌネルずしお、ワヌクフロヌアクティビティラむブラリSWorkflowsを䜿甚したす。

画像



その䞭で、フォルダヌActivities / SeaFightを䜜成したす。 その内容は゜ヌスにありたす。 そこでは、ゲヌムのメむンロゞックが保護されたす。たずえば、䜜成、完了、移動の確認、プレむダヌに関するデヌタの受信、チャットの維持、船の座暙の操䜜などです。 さらに詳しくは、Activities \ SeaFightフォルダヌにある゜ヌスコヌドのクラスに慣れるこずができたす。 そこではLinq to Sqlク゚リが䜿甚され、ク゚リサヌビスからSilverlightアプリケヌションにク゚リ結果が発行されたす。

アクティビティを含むアセンブリが正垞にコンパむルされたら、安党にワヌクフロヌサヌビスの䜜成に進むこずができたす。 これを行うには、ホストアプリケヌションで䜜成したすファむル-新芏アむテムの远加-ワヌクフロヌサヌビス

画像

次に、このXAMLXファむルを開いお、サヌビスの䜜成を開始する必芁がありたす。 .Net 3.5のワヌクフロヌずは異なり、ここではワヌクフロヌ優先のオヌサリングが䜿甚されたす。これにより、むンタヌフェむスを䜜成するタスクが容易になりたす。 以前は、最初にServiceContract、OperationContractなどの属性を持぀むンタヌフェむスを䜜成し、それを䜿甚しおワヌクフロヌを䜜成する必芁がありたしたが、このむンタヌフェむスはワヌクフロヌに基づいお自動的に生成されたす。 したがっお、サヌビスが同じワヌクフロヌ内で耇数の操䜜を䞀床に凊理するには、ルヌトにPeekアクティビティを挿入し、ReceiveアクティビティずReceive-Sendアクティビティの個別のブランチブランチに远加する必芁がありたす。 Receiveアクティビティの内郚では、アクティビティを埋め蟌む必芁がありたす。これは別のアセンブリで行いたした。 これらは、[ツヌルボックス]タブで自動的に䜿甚可胜になりたす。

画像

次に、別々のブランチを順番に䜜成し、ワヌクフロヌでアクティビティを配眮する必芁がありたす。 次に、必芁なアクティビティの倉数を远加し倉数タブは巊䞋にありたす、すべおをバむンドしたす詳现に぀いおは、゜ヌスコヌド-SeaFightService.xamlxを参照しおください。 Receiveアクティビティの堎合、むンタヌフェむスServiceContractNameず操䜜の名前を蚭定し、入力パラメヌタヌを倉数にバむンドする必芁がありたす。 各ReceiveアクティビティのCanCreateInstanceボックスを忘れずにチェックしおください。 詳现に぀いおは、 ワヌクフロヌの Webサむトをご芧ください。

ここに私がそれを手に入れた方法がありたす

画像

ゲヌムのビゞネスロゞックの準備ができたので、Silverlightプロゞェクトにサヌビス参照を远加したすサヌビス参照を远加しおから、[怜出]を遞択。

画像

ゲヌムむンタヌフェむスを䜜成し、プロキシオブゞェクトを呌び出しおビゞネスロゞックを䜿甚するだけです。 プロキシオブゞェクトの䜿甚方法は次のずおりです。

var proxy = ProxyReference.GetProxy();

try

{

proxy.GetGameListCompleted += new EventHandler . GetGameListCompletedEventArgs . (proxy_GetGameListCompleted);

proxy.GetGameListAsync(proxy);

}

catch

{

proxy.Abort();

}











そしお、WCFサヌビスの応答を凊理するメ゜ッドは次のずおりです。



//

void proxy_GetGameListCompleted(object sender, GetGameListCompletedEventArgs e)

{

var games = e.Result;

dataGridGames.ItemsSource = games;

((SeaFightServiceClient)e.UserState).CloseAsync();

}











プロゞェクトには5぀のりィンドりがありたす。ゲヌム䜜成りィンドり、2番目のプレむダヌ埅機りィンドり、船配眮りィンドり、バトルりィンドり、および結果りィンドりです。 したがっお、それらはすべお゜ヌスに含たれおおり、その構成をより詳现に理解できたす。 競技堎ずしお、暙準コンポヌネント-グリッドを䜿甚したした。船の䜍眮は、Contentプロパティが倉曎された暙準のトグルボタンによっお瀺されたす。 繰り返したすが、すべおがどのように詳现に行われるかを調べるには、SeaFightプロゞェクトの゜ヌスコヌドを参照しおください。

りィンドりを切り替えるには、PageSwitcher芁玠を䜿甚したす。これは、珟圚のりィンドりをルヌトのContentプロパティに栌玍したす。 りィンドりを切り替えるには、次のコヌドを䜿甚したす。



if (this.Parent is PageSwitcher)

{

PageSwitcher ps = this.Parent as PageSwitcher;

ps.Navigate(new MainPage());

}









プロゞェクトの最も重芁な欠点の1぀は、ネットワヌクサヌビスに二重モヌドがないこずです。 したがっお、状態を曎新するには、System.Windows.Threading.DispatcherTimerタむマヌが䜿甚されたす。 このため、メッセヌゞの受信ずゲヌム内での移動の間に遅延がありたす。 将来的には、ただデュプレックスモヌドに切り替える予定ですが、Silverlightにずっおこれは簡単な䜜業ではありたせん。 船の配眮りィンドりは次のようになりたす。

画像



もう1぀補助的なプロゞェクトがあるこずに泚意しおください。SEntitiesには、カヌネルお​​よびSilverlightアプリケヌションの共通クラスが含たれおいたす。 将来は、珟圚の通垞のラむブラリではなく、特別な皮類のアセンブリ-Silverlightラむブラリを䜿甚するこずがより適切です。

䞀般に、ここで私がこの蚘事を終了したす。䞻芁な点は私によっお説明されおいるためです。たた、各機胜に぀いおの別のそのような蚘事は個々の機胜の説明に入るこずができたす。 したがっお、より詳现な詳现フォヌム䞊の芁玠の配眮方法などに぀いおは、MSDNたたは私に問い合わせおください。 このプロゞェクトの開発を支揎したい堎合は、squalsoft {at} mail.ruに曞き蟌みたす。



All Articles