Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
.NET Framework 4 ã§ã¯ãWindows Workflow Foundation ã«å€æ°ã®æ©èœã远å ãããŠããŸãã ãã®ããã¥ã¡ã³ãã§ã¯ãããã€ãã®æ°æ©èœã«ã€ããŠèª¬æãã圹ã«ç«ã€å¯èœæ§ãããã·ããªãªã«ã€ããŠè©³ãã説æããŸãã
ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£
ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ãã㣠(Receiveã SendReplyã Sendã ReceiveReply) ã¯ãã¯ãŒã¯ãããŒããã® WCF ã¡ãã»ãŒãžã®éåä¿¡ã«äœ¿çšãããŸãã Receive SendReply ã¢ã¯ãã£ããã£ã¯ãæšæºã® WCF Web ãµãŒãã¹ãšåæ§ã« WSDL ãä»ããŠå ¬éããã Windows Communication Foundation (WCF) ãµãŒãã¹æäœã圢æããããã«äœ¿çšãããŸãã Send ãš ReceiveReply ã¯ãWCF ChannelFactoryãšåæ§ã® Web ãµãŒãã¹ã䜿çšããããã«äœ¿çšãããŸãããµãŒãã¹ åç §ã®è¿œå ãšã¯ã¹ããªãšã³ã¹ã¯ãäºåæ§ææžã¿ã®ã¢ã¯ãã£ããã£ãçæãã Workflow Foundation ã«ãååšããŸãã
ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£ãå§ããã«ããã£ãŠ
Visual Studio 2012 ã§ãWCF ã¯ãŒã¯ãã㌠ãµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ ãããžã§ã¯ããäœæããŸãã ReceiveãšSendReplyã®ãã¢ããã£ã³ãã¹ã«é 眮ãããŸãã
ãããžã§ã¯ããå³ã¯ãªãã¯ãã[ ãµãŒãã¹åç §ã®è¿œå ] ãéžæããŸãã æ¢åã® Web ãµãŒãã¹ WSDL ããã€ã³ããã[ OK] ãã¯ãªãã¯ããŸãã ãããžã§ã¯ãããã«ãããŠãçæãããã¢ã¯ãã£ãã㣠( Send ãš ReceiveReplyã䜿çšããŠå®è£ ) ãããŒã«ããã¯ã¹ã«è¡šç€ºããŸãã
ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£ã®ã·ããªãªäŸ
BestPriceFinderãµãŒãã¹ã¯è€æ°ã®èªç©ºäŒç€Ÿã®ãµãŒãã¹ã«åãåãããç¹å®ã®ã«ãŒãã«å¯ŸããŠæé©ãªèªç©ºåžã®äŸ¡æ Œãæ¢ããŸãã ãã®ã·ããªãªãå®è£
ããã«ã¯ãã¡ãã»ãŒãž ã¢ã¯ãã£ããã£ã䜿çšããŠäŸ¡æ ŒèŠæ±ãåä¿¡ããããã¯ãšã³ã ãµãŒãã¹ããäŸ¡æ ŒãååŸããäŸ¡æ ŒèŠæ±ã«æé©ãªäŸ¡æ Œã§å¿çããå¿
èŠããããŸãã ãŸããä»ã®æ¢å®ã®ã¢ã¯ãã£ããã£ã䜿çšããŠãæé©ãªäŸ¡æ Œãèšç®ããããã®ããžãã¹ ããžãã¯ãäœæããå¿
èŠããããŸãã
WorkflowServiceHost
WorkflowServiceHostã¯ãè€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãæ§æãWCF ã¡ãã»ãŒãžã³ã°ããµããŒãããæ¢å®ã®ã¯ãŒã¯ãã㌠ãã¹ãã§ã (ãã ããã¯ãŒã¯ãããŒã¯ãã¹ãããããã«ã¡ãã»ãŒãžã³ã°ã䜿çšããå¿ èŠã¯ãããŸãã)ã ãŸããäžé£ã®ãµãŒãã¹åäœãéããŠæ°žç¶åã远跡ãããã³ã€ã³ã¹ã¿ã³ã¹å¶åŸ¡ãšçµ±åãããŸãã WCF ã® ServiceHostãšåæ§ã«ã WorkflowServiceHost ã¯ã³ã³ãœãŒã«/WinForms/WPF ã¢ããªã±ãŒã·ã§ã³ãŸã㯠Windows ãµãŒãã¹ã§ã»ã«ããã¹ãããããããšããIIS ãŸã㯠WAS ã§ (.xamlx ãã¡ã€ã«ãšããŠ) Web ãã¹ãããããšãã§ããŸãã
ã¯ãŒã¯ãã㌠ãµãŒãã¹ ãã¹ãã®å§ãæ¹
Visual Studio 2010 ã§ãWCF ã¯ãŒã¯ãã㌠ãµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ ãããžã§ã¯ããäœæããŸãããã®ãããžã§ã¯ãã¯ãWeb ãã¹ãç°å¢ã§ WorkflowServiceHost ã䜿çšããããã«èšå®ãããŸãã
ã¡ãã»ãŒãžã³ã°ä»¥å€ã®ã¯ãŒã¯ãããŒããã¹ãããã«ã¯ãã¡ãã»ãŒãžã«åºã¥ããŠã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¹ã¿ã WorkflowHostingEndpoint ã远å ããŸãã
ã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ã¯ãWorkflowControlEndpointã«WorkflowServiceHostã远å ããWorkflowControlClientã䜿çšããŠå¶åŸ¡ã§ããŸã (äžæãŸãã¯çµäºãªã©)ã
WorkflowServiceHostã®ãµã³ãã«ã«ã€ããŠã¯ã次ã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³: äžæãããã€ã³ã¹ã¿ã³ã¹ç®¡ç
WorkflowServiceHost ã·ããªãª
BestPriceFinderãµãŒãã¹ã¯ãç¹å®ã®ã«ãŒãã®æè¯ã®ãã±ããäŸ¡æ ŒãèŠã€ããããã«è€æ°ã®èªç©ºäŒç€ŸãµãŒãã¹ã«åŒã³åºããŸãã ãã®ã·ããªãªãå®è£ ããã«ã¯ã WorkflowServiceHostã§ã¯ãŒã¯ãããŒããã¹ãããå¿ èŠããããŸãã ãŸããã¡ãã»ãŒãž ã¢ã¯ãã£ããã£ã䜿çšããŠäŸ¡æ ŒèŠæ±ãåãåããããã¯ãšã³ã ãµãŒãã¹ããäŸ¡æ ŒãååŸããäŸ¡æ ŒèŠæ±ã«æé©ãªäŸ¡æ Œã§å¿çããŸãã
çžé¢
çžé¢é¢ä¿ã¯ã次㮠2 ã€ã®ããããã§ãã
ã¡ãã»ãŒãžãã°ã«ãŒãåããæ¹æ³ãã€ãŸããèŠæ±ã¡ãã»ãŒãžãšãã®å¿çã®é¢ä¿ã§ãã
ããŒã¿ã®äžéšããµãŒãã¹ ã€ã³ã¹ã¿ã³ã¹ã«ãããã³ã°ããæ¹æ³
ã¯ããã«
é¢é£ä»ãã®äœ¿çšãéå§ããã«ã¯ãVisual Studio ã§æ°ãããããžã§ã¯ããäœæããŸãã CorrelationHandleåã®å€æ°ãäœæããŸãã
ã¡ãã»ãŒãžãã°ã«ãŒãåããããã«äœ¿çšãããçžé¢é¢ä¿ã®äŸãšããŠãã¡ãã»ãŒãžãã°ã«ãŒãåãã Request-Reply é¢é£ä»ãããããŸãã
Receive ã¢ã¯ãã£ããã£ã§ãCorrelationInitializers ããããã£ãã¯ãªãã¯ããäžèšã®æåã®æé ã§äœæãã CorrelationHandle ã䜿çšããŠRequestReplyCorrelationInitializerã远å ããŸãã
SendReplyãå³ã¯ãªãã¯ãã[SendReply ã®äœæ] ãã¯ãªãã¯ããŠãReceive ã¢ã¯ãã£ããã£ãäœæããŸãã Receive ã¢ã¯ãã£ããã£ã®åŸã«ã¯ãŒã¯ãããŒã«è²Œãä»ããŸãã
ããŒã¿ã®äžéšããµãŒãã¹ ã€ã³ã¹ã¿ã³ã¹ã«ãããã³ã°ããäŸãšããŠã¯ãããŒã¿ã®äžéš (泚æ ID ãªã©) ãç¹å®ã®ã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ã«ãããããã³ã³ãã³ã ããŒã¹ã®çžé¢é¢ä¿ããããŸãã
- ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£ã§ã
CorrelationInitializersããããã£ãã¯ãªãã¯ããäžèšã§äœæããQueryCorrelationInitializer倿°ã䜿çšããŠCorrelationHandleã远å ããŸãã ããããããŠã³ ã¡ãã¥ãŒããã¡ãã»ãŒãžã®ç®çã®ãããã㣠(OrderID ãªã©) ãããã«ã¯ãªãã¯ããŸããCorrelatesWithããããã£ããäžèšã§äœ¿çšããCorrelationHandle倿°ã«èšå®ããŸãã
- ã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£ã§ã
çžé¢é¢ä¿ã®ã·ããªãª
泚æåŠçã¯ãŒã¯ãããŒã¯ãæ°ããæ³šæã®äœæãšåŠçäžã®æ¢åã®æ³šæã®æŽæ°ãåŠçããããã«äœ¿çšãããŸãã ãã®ã·ããªãªãå®è£
ããã«ã¯ã WorkflowServiceHost ã§ã¯ãŒã¯ãããŒããã¹ãããã¡ãã»ãŒãžã³ã° ã¢ã¯ãã£ããã£ã䜿çšããå¿
èŠããããŸãã ãŸããæ£ããã¯ãŒã¯ãããŒã«å¯ŸããæŽæ°ã確å®ã«è¡ãããããã«ã orderId ã«åºã¥ãçžé¢é¢ä¿ãå¿
èŠã«ãªããŸãã
ç°¡ç¥åãããæ§æ
WCF æ§æã¹ããŒãã¯è€éã§ããããŠãŒã¶ãŒã«å€ãã®èŠã€ãã«ããæ©èœãæäŸããŸãã .NET Framework 4.6.1 ã§ã¯ãWCF ãŠãŒã¶ãŒãæ¬¡ã®æ©èœã䜿çšããŠãµãŒãã¹ãæ§æã§ããããã«æ¯æŽããããšã«éç¹ã眮ããŠããã
æç€ºçãªãµãŒãã¹ããšã®æ§æãäžèŠã«ãªããŸãã ãµãŒãã¹ã® <service> èŠçŽ ãæ§æããããµãŒãã¹ãããã°ã©ã ã«ãã£ãŠãšã³ããã€ã³ããå®çŸ©ããŠããªãå Žåãäžé£ã®ãšã³ããã€ã³ãããµãŒãã¹ã«èªåçã«è¿œå ããããµãŒãã¹ããŒã¹ã¢ãã¬ã¹ããšã« 1 ã€ããµãŒãã¹ã«ãã£ãŠå®è£ ãããã³ã³ãã©ã¯ãããšã« 1 ã€è¿œå ãããŸãã
ãŠãŒã¶ãŒã WCF ãã€ã³ãã£ã³ã°ãšåäœã®æ¢å®å€ãå®çŸ©ã§ããããã«ããŸãããã®å€ã¯ãæç€ºçãªæ§æãªãã§ãµãŒãã¹ã«é©çšãããŸãã
æšæºãšã³ããã€ã³ãã¯ãåå©çšå¯èœãªäºåæ§ææžã¿ãšã³ããã€ã³ããå®çŸ©ããŸãããã®ãšã³ããã€ã³ãã«ã¯ã1 ã€ä»¥äžã®ãšã³ããã€ã³ã ãããã㣠(ã¢ãã¬ã¹ããã€ã³ããã³ã³ãã©ã¯ã) ã®åºå®å€ããããã«ã¹ã¿ã ããããã£ã®å®çŸ©ãå¯èœã§ãã
æåŸã«ã ConfigurationChannelFactory<TChannel> ã䜿çšãããšãWCF ã¯ã©ã€ã¢ã³ãæ§æãäžå çã«ç®¡çã§ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ ãã¡ã€ã³ã®èªã¿èŸŒã¿æéåŸã«æ§æãéžæãŸãã¯å€æŽãããã·ããªãªã§åœ¹ç«ã¡ãŸãã
ã¯ããã«
ç°¡ç¥åãããæ§æã·ããªãª
çµéšè±å¯ãª ASMX éçºè ã WCF ã®äœ¿çšãéå§ããããšèããŠããŸãã ãã ããWCF ã¯è€éãããããã§ãã æ§æãã¡ã€ã«ã«æžã蟌ãå¿ èŠããããã¹ãŠã®æ å ±ã¯äœã§ãã? .NET 4 ã§ã¯ãæ§æãã¡ã€ã«ããŸã£ããæããªãããã«ããããšãã§ããŸãã
WCF ãµãŒãã¹ã®æ¢åã®ã»ããã¯ãæ§æãšä¿å®ãéåžžã«å°é£ã§ãã æ§æãã¡ã€ã«ã«ã¯ãéåžžã«å±éºãªäœåè¡ãã® XML ã³ãŒãããããŸãã ã³ãŒãã®éã管çãããããã®ã«æžããã«ã¯ããã«ããå¿ èŠã§ãã
ããŒã¿å¥çŽè§£æ±ºããŒã«
.NET Framework 3.5 ã§ã¯ãæ¢ç¥ã®åã®èšèšã«ã¯ããã€ãã®å¶éããããŸããã
ã·ãªã¢ã«åãŸãã¯éã·ãªã¢ã«åäžã«æ¢ç¥ã®åãåçã«è¿œå ã§ããŸããã§ããã
ã·ãªã¢ã©ã€ã¶ãŒã¯ãäžæãª xsi:type æ å ±ãåŠçã§ããŸããã§ããã
ããšãã°ããããã¯ãŒã¯äžã®ã·ãªã¢ã«åã€ã³ã¹ã¿ã³ã¹ã®ãµã€ãºãå°ããããå Žåãªã©ããããã¯ãŒã¯ã«è¡šç€ºãã xsi:type ããŠãŒã¶ãŒãæå®ããããšã¯ã§ããŸããã§ããã
DataContractResolver ã¯ã.NET Framework 4.5 ã§ãããã®åé¡ã解決ããŸãã
ã¯ããã«
ããŒã¿ ã³ã³ãã©ã¯ã ãªãŸã«ããŒã®ã·ããªãª
ãµãŒãã¹ã§æ°ååã® KnownTypeAttribute ãªããžã§ã¯ãã宣èšããå¿ èŠããªããªããŸãã
XML BLOB ã®ãµã€ãºãå°ããããã
ãããŒãã£ãŒã
ãããŒãã£ãŒãã¯ããã¡ã€ã³ã®åé¡ãèŠèŠçã«è¡šãããç¥ããããã©ãã€ã ã§ãã ããã¯ã.NET Framework 4 ã§å°å ¥ãããæ°ããå¶åŸ¡ãã㌠ã¹ã¿ã€ã«ã§ãã ãããŒãã£ãŒãã®äž»ãªç¹åŸŽã¯ãç¹å®ã®æç¹ã§ 1 ã€ã®ã¢ã¯ãã£ããã£ã®ã¿ãå®è¡ããããšããããšã§ãã ãããŒãã£ãŒãã§ã¯ã«ãŒãã代æ¿çµæã衚çŸã§ããŸãããè€æ°ã®ããŒãã®åæå®è¡ããã€ãã£ãã«è¡šçŸããããšã¯ã§ããŸããã
ã¯ããã«
Visual Studio 2012 ã§ãã¯ãŒã¯ãã㌠ã³ã³ãœãŒã« ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ãããŒãã£ãŒãã远å ããŸãã
ãããŒãã£ãŒãæ©èœã§ã¯ã次ã®ã¯ã©ã¹ã䜿çšããŸãã
ãµã³ãã«:
ãã¶ã€ããŒã®ããã¥ã¡ã³ã:
ãããŒãã£ãŒã ã·ããªãª
ãããŒãã£ãŒã ã¢ã¯ãã£ããã£ã䜿çšããŠãæšæž¬ã²ãŒã ãå®è£ ã§ããŸãã æšæž¬ã²ãŒã ã¯éåžžã«ç°¡åã§ã:ã³ã³ãã¥ãŒã¿ã¯ä¹±æ°ãéžæãããã¬ã€ã€ãŒã¯ãã®æ°ãæšæž¬ããå¿ èŠããããŸãã ãã¬ã€ã€ãŒãåæšæž¬ãéä¿¡ãããšãã³ã³ãã¥ãŒã¿ãŒã«ãã³ãã衚瀺ãããŸã (ã€ãŸãã"å°ããæ°å€ã詊ã" ãªã©)ã ãã¬ã€ã€ãŒã 7 åæªæºã§æ°ãèŠã€ããå Žåã¯ãã³ã³ãã¥ãŒã¿ãŒããç¹å¥ãªãç¥ããåãåããŸãã ãã®ã²ãŒã ã¯ãæ¬¡ã®æç¶ãåã¢ã¯ãã£ããã£ã®çµã¿åããã§å®è£ ã§ããŸãã
æç¶ãåã¢ã¯ãã£ãã㣠(SequenceãIfãForEachãSwitchãAssignãDoWhileãWhile)
æç¶ãåã¢ã¯ãã£ããã£ã¯ãããã°ã©ãã«ãšã£ãŠãªãã¿ã®ããæŠå¿µã䜿çšããŠã·ãŒã±ã³ã·ã£ã«å¶åŸ¡ãããŒãã¢ãã«åããã¡ã«ããºã ãæäŸããŸãã ãããã®ã¢ã¯ãã£ããã£ã«ãããåŸæ¥ã®æ§é åãããããã°ã©ãã³ã°èšèªã³ã³ã¹ãã©ã¯ããå¯èœã«ãªããå¿ èŠã«å¿ããŠãC# ã Visual Basic ãªã©ã®äžè¬çãªæç¶ãåèšèªãšåçã®èšèªãæäŸãããŸãã
ã¯ããã«
Visual Studio 2012 ã§ãã¯ãŒã¯ãã㌠ã³ã³ãœãŒã« ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§æç¶ãåã¢ã¯ãã£ããã£ã远å ããŸãã
ãµã³ãã«:
ãã¶ã€ããŒã®ããã¥ã¡ã³ã:
æç¶ãåã¢ã¯ãã£ããã£ã®ã·ããªãª
Parallel: ã€ã³ãã©ããã ããã¥ã¡ã³ã管çã·ã¹ãã ã«ã¯ãããã¥ã¡ã³ãæ¿èªã¯ãŒã¯ãããŒããããŸãã ã€ã³ãã©ãããã«çºè¡ããã«ã¯ãè€æ°ã®éšéã®ãŠãŒã¶ãŒãããã¥ã¡ã³ããæ¿èªããå¿ èŠããããŸãã æ¿èªã®ããã®ç¢ºç«ãããé åºã¯ãããŸããããããã¯ãããã¥ã¡ã³ãã "æ¿èªä¿çäž" ãã§ãŒãºã«ããéããã€ã§ãçºçããå¯èœæ§ããããŸãã ãŠãŒã¶ãŒãã¬ãã¥ãŒã®ããã«ããã¥ã¡ã³ããéä¿¡ããå Žåã¯ãçŽæ¥ç®¡çè ãã€ã³ãã©ããã管çè ãããã³å éšéä¿¡ãããŒãžã£ãŒã«ãã£ãŠæ¿èªãããå¿ èŠããããŸãã
ParallelForEach<T>: WF ã¢ããªã±ãŒã·ã§ã³ã¯ãå€§äŒæ¥å ã®äŒæ¥ã®è³Œå ¥ã管çããŸãã äŒæ¥ã«ãŒã«ã§ã¯ã賌買æäœãèšç»ããåã«ã3 ã€ã®ç°ãªãä»å ¥å ã®è©äŸ¡ãå¿ èŠã§ããããšãèŠå®ãããŠããŸãã 賌買éšéã®åŸæ¥å¡ããäŒç€Ÿã®ä»å ¥å äžèЧãã 3 ã€ã®ãã³ããŒãéžæããŸãã ãããã®ãã³ããŒãéžæããŠéç¥ããåŸãäŒç€Ÿã¯çµæžææ¡ãåŸ ã¡ãŸãã ææ¡ã¯ä»»æã®é åºã§è¡ãããšãã§ããŸãã WF ã§ãã®ã·ããªãªãå®è£ ããããã«ããã³ããŒã®ã³ã¬ã¯ã·ã§ã³ãå埩åŠçããçµæžçææ¡ãæ±ãã ParallelForEach<T> ã䜿çšããŸãã ãã¹ãŠã®ãªãã¡ãŒãåéããããšãæé©ãªãã©ã³ãéžæãããŠè¡šç€ºãããŸãã
InvokeMethod
InvokeMethod ã¢ã¯ãã£ããã£ã䜿çšãããšãã¹ã³ãŒãå ã®ãªããžã§ã¯ããŸãã¯åã§ãããªã㯠ã¡ãœãããåŒã³åºãããšãã§ããŸãã ãã©ã¡ãŒã¿ãŒ (ãã©ã¡ãŒã¿ãŒé åãå«ã) ã®æç¡ã«é¢ä¿ãªããã€ã³ã¹ã¿ã³ã¹ã¡ãœãããšéçã¡ãœããã®åŒã³åºããšãžã§ããªã㯠ã¡ãœããããµããŒãããŸãã ãŸããã¡ãœãããåæçããã³éåæçã«å®è¡ããããšãã§ããŸãã
ã¯ããã«
Visual Studio 2012 ã§ãã¯ãŒã¯ãã㌠ã³ã³ãœãŒã« ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ InvokeMethod ã¢ã¯ãã£ããã£ã远å ããéçã¡ãœãããšã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããæ§æããŸãã
ãã¶ã€ã㌠ããã¥ã¡ã³ã: InvokeMethod ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒ
InvokeMethod ã®ã·ããªãª
ã¹ã³ãŒãå ã®ãªããžã§ã¯ãå ã®ã¡ãœãããåŒã³åºãå¿ èŠããããŸãã ããšãã°ãå€ããã£ã¯ã·ã§ããªã«è¿œå ããå¿ èŠããããŸãã ãã£ã¯ã·ã§ããªã®ã€ã³ã¹ã¿ã³ã¹ã® Add ã¡ãœãããåŒã³åºãããããŒãšå€ãæäŸãããŸãã
åŸæ¥ã® CLR ãªããžã§ã¯ãã§ã¡ãœãããåŒã³åºãå¿ èŠããããŸãã ãã®ã¬ã¬ã· ã¯ã©ã¹ãžã®åŒã³åºããã©ããããã«ã¹ã¿ã ã¢ã¯ãã£ããã£ãäœæãã代ããã«ãã¯ãŒã¯ãããŒã®å®è¡äžã«ã¹ã³ãŒãå ã«ããå Žåã¯ã InvokeMethod 䜿çšã§ããŸãã
ãšã©ãŒåŠçã¢ã¯ãã£ããã£
TryCatch ã¢ã¯ãã£ããã£ã¯ãäžé£ã®å å«ã¢ã¯ãã£ããã£ã®å®è¡äžã«çºçããäŸå€ããã£ããããããã®ã¡ã«ããºã ãæäŸããŸã (C# ããã³ Visual Basic ã® Try/Catch ã³ã³ã¹ãã©ã¯ãã«äŒŒãŠããŸã)ã TryCatch ã¯ãã¯ãŒã¯ãã㌠ã¬ãã«ã§äŸå€åŠçãæäŸããŸãã ãã³ãã«ãããªãäŸå€ãã¹ããŒããããšãã¯ãŒã¯ãããŒãäžæ¢ãããFinally ãããã¯ã¯å®è¡ãããŸããã ãã®åäœã¯ C# ãšäžèŽããŸãã
ã¯ããã«
Visual Studio 2012 ã§ãã¯ãŒã¯ãã㌠ã³ã³ãœãŒã« ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ TryCatch ã¢ã¯ãã£ããã£ã远å ããŸãã
ãµã³ãã«: TryCatch ã䜿çšãããããŒãã£ãŒã ã¢ã¯ãã£ããã£ã§ã®ãšã©ãŒåŠç
ãã¶ã€ããŒã®ããã¥ã¡ã³ã: ãšã©ãŒåŠçã¢ã¯ãã£ãã㣠ãã¶ã€ããŒ
ãšã©ãŒåŠçã·ããªãª
äžé£ã®ã¢ã¯ãã£ããã£ãå®è¡ããå¿ èŠãããããšã©ãŒãçºçãããšãã«ç¹å®ã®ããžãã¯ãå®è¡ããå¿ èŠããããŸãã ãã®ãšã©ãŒåŠçããžãã¯äžã«ãšã©ãŒãå埩ã§ããªãããšãããã£ãå Žåã¯ãäŸå€ãåã¹ããŒããã芪ã¢ã¯ãã£ãã㣠(ãŸãã¯ãã¹ã) ãåé¡ã«å¯ŸåŠããŸãã
ã¢ã¯ãã£ããã£ã®éžæ
Pick ã¢ã¯ãã£ããã£ã¯ãWF ã§ã®ã€ãã³ã ããŒã¹ã®å¶åŸ¡ãã㌠ã¢ããªã³ã°ãæäŸããŸãã Pick ã«ã¯ãåãã©ã³ããå®è¡ããåã«ç¹å®ã®ã€ãã³ããçºçããã®ãåŸ æ©ãã倿°ã®ãã©ã³ããå«ãŸããŠããŸãã ãã®ã»ããã¢ããã§ã¯ã Pick ã¯ãã¢ã¯ãã£ããã£ããªãã¹ã³ããŠããã€ãã³ãã®ã»ããã® 1 ã€ã ããå®è¡ãã Switch<T> ãšåæ§ã«åäœããŸãã åãã©ã³ãã¯ã€ãã³ã ããªãã³ã§ãããçºçããã€ãã³ãã¯æåã«å¯Ÿå¿ãããã©ã³ããå®è¡ããŸãã ä»ã®ãã¹ãŠã®åå²ã¯ãã€ãã³ãã®ãªãã¹ã³ããã£ã³ã»ã«ãã忢ããŸãã
ã¯ããã«
Visual Studio 2012 ã§ãã¯ãŒã¯ãã㌠ã³ã³ãœãŒã« ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ Pick ã¢ã¯ãã£ããã£ã远å ããŸãã
ãµã³ãã«: Pick ã¢ã¯ãã£ããã£ã®äœ¿çš
ãã¶ã€ããŒã®ããã¥ã¡ã³ã: ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒã®éžæ
ã·ããªãªã®éžæ
ãŠãŒã¶ãŒã«å ¥åãæ±ããã¡ãã»ãŒãžã衚瀺ãããå¿ èŠããããŸãã éåžžã®ç¶æ³ã§ã¯ãéçºè 㯠ReadLine ãªã©ã®ã¡ãœããåŒã³åºãã䜿çšããŠããŠãŒã¶ãŒã®å ¥åãæ±ããŸãã ãã®ã»ããã¢ããã®åé¡ã¯ããŠãŒã¶ãŒãäœããå ¥åãããŸã§ããã°ã©ã ãåŸ æ©ããããšã§ãã ãã®ã·ããªãªã§ã¯ããããã¯ã¢ã¯ãã£ããã£ã®ãããã¯ãè§£é€ããããã«ã¿ã€ã ã¢ãŠããå¿ èŠã§ãã äžè¬çãªã·ããªãªã¯ãç¹å®ã®æéå ã«ã¿ã¹ã¯ãå®äºããå¿ èŠãããã·ããªãªã§ãã ããããã³ã° ã¢ã¯ãã£ããã£ã®ã¿ã€ã ã¢ãŠãã¯ãPick ã倧éã®å€ã远å ããã·ããªãªã§ãã
WCF ã«ãŒãã£ã³ã° ãµãŒãã¹
ã«ãŒãã£ã³ã° ãµãŒãã¹ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒãã¹ã®éã§ WCF ã¡ãã»ãŒãžãã©ã®ããã«æµããããå¶åŸ¡ã§ããæ±çšãœãããŠã§ã¢ ã«ãŒã¿ãŒãšããŠèšèšãããŠããŸãã ã«ãŒãã£ã³ã° ãµãŒãã¹ã䜿çšãããšãã¯ã©ã€ã¢ã³ãããµãŒãã¹ããåãé¢ãããšãã§ããŸããããã«ããããµããŒãã§ããæ§æãšããµãŒãã¹ããã¹ãããæ¹æ³ãæ€èšããéã®æè»æ§ã®ç¹ã§ãã¯ããã«èªç±ã«ãªããŸãã .NET Framework 3.5 ã§ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒãã¹ã¯ç·å¯ã«çµåãããŠããŸãããã¯ã©ã€ã¢ã³ãã¯ãéä¿¡ã«å¿ èŠãªãã¹ãŠã®ãµãŒãã¹ãšããã®å Žæã«ã€ããŠç¥ãå¿ èŠããããŸããã ããã«ã.NET Framework 3.5 ã® WCF ã«ã¯æ¬¡ã®å¶éããããŸããã
ãã®ããžãã¯ãã¯ã©ã€ã¢ã³ãã«ããŒãã³ãŒãã£ã³ã°ããå¿ èŠããã£ãã®ã§ããšã©ãŒåŠçã¯è€éã§ããã
ã¯ã©ã€ã¢ã³ããšãµãŒãã¹ã§ã¯ãåžžã«åããã€ã³ãã£ã³ã°ã䜿çšããå¿ èŠããããŸããã
ãµãŒãã¹ãååã«èæ ®ãããããšã¯ã»ãšãã©ãããŸããã§ãããè€æ°ã®ãµãŒãã¹ãéžæããå¿ èŠã¯ãªãããã¹ãŠãå®è£ ãã 1 ã€ã®ãµãŒãã¹ãšã¯ã©ã€ã¢ã³ããéä¿¡ããæ¹ãç°¡åã§ãã
.NET 4 ã®ã«ãŒãã£ã³ã° ãµãŒãã¹ã¯ããããã®åé¡ã解決ããããããããã«èšèšãããŠããŸãã æ°ããã«ãŒãã£ã³ã° ãµãŒãã¹ã«ã¯ãæ¬¡ã®æ©èœããããŸãã
ã³ã³ãã³ã ããŒã¹ã®ã«ãŒãã£ã³ã° (MessageFilter ãªããžã§ã¯ãã¯ã¡ãã»ãŒãžã調ã¹ãŠãéä¿¡å ãæ±ºå®ããŸã)ã
ãããã³ã« ããªããžã³ã° (ãã©ã³ã¹ããŒããšã¡ãã»ãŒãž)
ãšã©ãŒåŠç (ã«ãŒã¿ãŒã¯éä¿¡äŸå€ããã£ããããããã¯ã¢ãã ãšã³ããã€ã³ãã«ãã§ãŒã«ãªãŒããŒããŸã)
MessageFilterTable<TFilterData>ãšã«ãŒãã£ã³ã°æ§æã®åç (ã¡ã¢ãªå ) æŽæ°ã
ã¯ããã«
ããã¥ã¡ã³ã: ã«ãŒãã£ã³ã°
ãµã³ãã«: ã«ãŒãã£ã³ã° ãµãŒãã¹ [WCF ãµã³ãã«]
ããã°: ã«ãŒãã£ã³ã°èŠå!
ã«ãŒãã£ã³ã° ã·ããªãª
ã«ãŒãã£ã³ã° ãµãŒãã¹ã¯ã次ã®ã·ããªãªã§åœ¹ç«ã¡ãŸãã
ã¯ã©ã€ã¢ã³ãã¯ããã¹ãŠã®ãµãŒãã¹ã«çŽæ¥å¯ŸåŠããªããŠããè€æ°ã®ãµãŒãã¹ãšéä¿¡ã§ããŸãã
ã¯ã©ã€ã¢ã³ãã¯ãã¯ã©ã€ã¢ã³ãèŠæ±ã«å¯ŸããŠè¿œå ã®ããžãã¯ãå®è¡ããŠããããã«ãŒãã£ã³ã°ããå Žæã決å®ã§ããŸã
ã¯ã©ã€ã¢ã³ããå®è¡ããæäœããã¯ã©ã€ã¢ã³ãããªãã¡ã¯ã¿ãªã³ã°ããã«è€æ°ã®ãµãŒãã¹å®è£ ã«åè§£ããŸãã
ã¯ã©ã€ã¢ã³ããšãµãŒãã¹ã¯ãç°ãªãã»ãã¥ãªãã£èšå®ã§ç°ãªããã€ã³ãã£ã³ã°ã話ãããšãã§ããŸãã
ã¯ã©ã€ã¢ã³ãã¯ãé害ããµãŒãã¹ã®å©çšäžå¯ã«å¯ŸããŠããå ç¢ã«ããããšãã§ããŸãã
WCF æ€åº
WCF Discovery ã¯ãæ¢çŽ¢ã¡ã«ããºã ãã¢ããªã±ãŒã·ã§ã³ ã€ã³ãã©ã¹ãã©ã¯ãã£ã«çµã¿èŸŒãããšãã§ãããã¬ãŒã ã¯ãŒã¯ ãã¯ãããžã§ãã ããã䜿çšããŠããµãŒãã¹ãæ€åºå¯èœã«ãããµãŒãã¹ãæ€çŽ¢ããããã«ã¯ã©ã€ã¢ã³ããæ§æã§ããŸãã ã¯ã©ã€ã¢ã³ãããšã³ããã€ã³ãã§ããŒãã³ãŒãã£ã³ã°ããå¿ èŠããªããªããã¢ããªã±ãŒã·ã§ã³ã®å ç¢æ§ãšãã©ãŒã«ã ãã¬ã©ã³ãæ§ãé«ããªããŸãã Discovery ã¯ãèªåæ§ææ©èœãã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãã®ã«æé©ãªãã©ãããã©ãŒã ã§ãã
ãããã¯ã㯠WS-Discovery ã®æšæºã®äžã«é ãããã çžäºéçšå¯èœãæ¡åŒµå¯èœãæ±çšã«èšèšãããŠããŸãã ãã®è£œåã§ã¯ã次㮠2 ã€ã®åäœã¢ãŒãããµããŒããããŠããŸãã
ãããŒãžã: ãããã¯ãŒã¯äžã«æ¢åã®ãµãŒãã¹ã«é¢ããç¥èããããšã³ãã£ãã£ãããå Žåãã¯ã©ã€ã¢ã³ãã¯æ å ±ãçŽæ¥ç §äŒããŸãã ãã㯠Active Directory ã«äŒŒãŠããŸãã
ã¢ãããã¯: ã¯ã©ã€ã¢ã³ãããã«ããã£ã¹ã ã¡ãã»ãŒãžã䜿çšããŠãµãŒãã¹ãæ€çŽ¢ããå Žæã
ããã«ãæ¢çŽ¢ã¡ãã»ãŒãžã¯ãããã¯ãŒã¯ ãããã³ã«ã«äŸåããŸãããã¢ãŒãèŠä»¶ããµããŒãããä»»æã®ãããã³ã«ã§ãããã䜿çšã§ããŸãã ããšãã°ãæ¢çŽ¢ãã«ããã£ã¹ã ã¡ãã»ãŒãžã¯ãUDP ãã£ãã«ãŸãã¯ãã«ããã£ã¹ã ã¡ãã»ãŒãžã³ã°ããµããŒãããä»ã®ãããã¯ãŒã¯çµç±ã§éä¿¡ã§ããŸãã ãããã®èšèšãã€ã³ããšæ©èœã®æè»æ§ãçµã¿åãããããšã§ãæ€åºããœãªã¥ãŒã·ã§ã³ã«ç¹ã«é©å¿ããããšãã§ããŸãã
ã¯ããã«
ããã¥ã¡ã³ã: WCF Discovery
ãµã³ãã«: æ€åº (ãµã³ãã«)
æ¢çŽ¢ã·ããªãª
éçºè ã¯ãèªåã®ãµãŒãã¹ããã€å©çšå¯èœã«ãªããã¯äžæã§ããããããšã³ããã€ã³ããããŒã ã³ãŒãã£ã³ã°ããããšãæãã§ããŸããã 代ããã«ãéçºè ã¯å®è¡æã«ãµãŒãã¹ãéžæããããšèããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããŒãã³ãéã«ã¯ãããå€ãã®åé¢ãå ç¢æ§ãèªåæ§æãå¿ èŠã§ãã
ãã©ããã³ã°
ã¯ãŒã¯ãããŒè¿œè·¡ã¯ãã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ã®å®è¡ã«é¢ããåææ å ±ãæäŸããŸãã 远跡ã€ãã³ãã¯ãã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ ã¬ãã«ã§ã¯ãŒã¯ãããŒããçæãããã¯ãŒã¯ãããŒå ã®ã¢ã¯ãã£ããã£ãå®è¡ããããšãã«çæãããŸãã 远跡ã¬ã³ãŒãã«ç»é²ããã«ã¯ãã¯ãŒã¯ãããŒã®è¿œè·¡åå è ãã¯ãŒã¯ãã㌠ãã¹ãã«è¿œå ããå¿ èŠããããŸãã 远跡ã¬ã³ãŒãã¯ã远跡ãããã¡ã€ã«ã䜿çšããŠãã£ã«ã¿ãŒåŠçãããŸãã .NET Framework ã«ã¯ ETW (Windows ã€ãã³ã ãã¬ãŒã·ã³ã°) 远跡åå èŠçŽ ãçšæãããŠãããåºæ¬çãªãããã¡ã€ã«ã machine.config ãã¡ã€ã«ã«ã€ã³ã¹ããŒã«ãããŸãã
ã¯ããã«
Visual Studio 2010 ã§ãWCF ã¯ãŒã¯ãã㌠ãµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ ãããžã§ã¯ããäœæããŸãã éå§ããã«ã¯ã Receive ãš SendReply ã®ãã¢ããã£ã³ãã¹ã«é 眮ãããŸãã
web.config ãéãããããã¡ã€ã«ã®ãªã ETW 远跡åäœã远å ããŸãã
æ¢å®ã®ãããã¡ã€ã«ã䜿çšãããŸãã
ã€ãã³ã ãã¥ãŒã¢ãŒãéããæ¬¡ã®ããŒãã§åæãã£ãã«ãæå¹ã«ããŸãã ã€ãã³ã ãã¥ãŒã¢ãŒã ã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ ãã°ã Microsoftã Windowsã Application Server-Applicationsã [åæ] ãå³ã¯ãªãã¯ãã [ãã°ã®æå¹å] ãéžæããŸãã
ã¯ãŒã¯ãã㌠ãµãŒãã¹ãå®è¡ããŸãã
ã€ãã³ã ãã¥ãŒã¢ãŒã§ã¯ãŒã¯ãããŒè¿œè·¡ã€ãã³ãã芳å¯ããŸãã
ãµã³ãã«: 远跡
æŠå¿µããã¥ã¡ã³ã: ã¯ãŒã¯ãããŒã®è¿œè·¡ãšãã¬ãŒã¹
SQL ã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢
SqlWorkflowInstanceStoreã¯ãã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢ã® SQL Server ããŒã¹ã®å®è£ ã§ãã ã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢ã«ã¯ãå®è¡äžã®ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ãšããã®ã€ã³ã¹ã¿ã³ã¹ã®èªã¿èŸŒã¿ãšåéã«å¿ èŠãªãã¹ãŠã®ããŒã¿ãæ ŒçŽãããŸãã ãµãŒãã¹ ãã¹ãã¯ãã¯ãŒã¯ãããŒãç¶ç¶ããå Žåã¯ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ãä¿åããããã«ã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢ã«æç€ºãããã®ã€ã³ã¹ã¿ã³ã¹ã®ã¡ãã»ãŒãžãå°çãããšãããŸãã¯é å»¶ã¢ã¯ãã£ããã£ã®æå¹æéãåãããšãã«ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ãèªã¿èŸŒãããã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢ã«æç€ºããŸãã
ã¯ããã«
Visual Studio 2012 ã§ãæé»çãŸãã¯æç€ºç㪠Persist ã¢ã¯ãã£ããã£ãå«ãã¯ãŒã¯ãããŒãäœæããŸãã ã¯ãŒã¯ãã㌠ãµãŒãã¹ ãã¹ãã« SqlWorkflowInstanceStore åäœã远å ããŸãã ããã¯ãã³ãŒããŸãã¯ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã§è¡ãããšãã§ããŸãã
ãµã³ãã«: æ°žç¶æ§
æŠå¿µããã¥ã¡ã³ã: SQL ã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ ã¹ãã¢ã