
ã ãããç§ã¯ããŸããŸãªåéã§èªå®ãããå°é家ã§ããã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ã«æžã蟌ã¿ãŸãã