C#¤È½ô¡¹

C#¤¬¥á¥¤¥ó¤Ç¾¤â¤Þ¤¡½ô¡¹¤Ê¥Ö¥í¥°¤Ç¤¹
¤ª¤«¤·¤Ê¤³¤È½ñ¤¤¤Æ¤¿¤é»ØÅ¦¤·¤Æ¤¯¤ì¤ë¤È´ò¤·¤¤¤Ç¤¹(¡­Ž¥¢ÏŽ¥`)
¤Ä¡¼¤«¥³¥á¥ó¥ÈÍߤ·¤¤(¡­Ž¥¦ØŽ¥¡®)

2007/04/23 23:08
ASP.NET ¤Ç¤Ï¡¢Global.asax ¤ÇÎã³°¤ò°ì¸µÅª¤Ë¥Ï¥ó¥É¥ê¥ó¥°¤¹¤ë¤¿¤á¤Î¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤òÍѰդ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿¡£¤·¤«¤·¡¢WCF ¤Ç¤Ï»Äǰ¤Ê¤¬¤é Global.asax ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£ ( ASP.NET ¸ß´¹¥â¡¼¥É¤Ç¤âÈ󥵥ݡ¼¥È¡£ )

WCF ¤Ç¤Ï¡¢Îã³°¤ò°ì¸µÅª¤Ë¥Ï¥ó¥É¥ê¥ó¥°¤¹¤ë¤¿¤á¤Îµ¡¹½¤¬Ê̤ÎÊýË¡¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£
Global.asax ¤ËÈæ¤Ù¤Æ¡¢¼ê½ç¤¬¤ä¤äÌÌÅݤȤʤê¤Þ¤¹¤¬¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ë¥Õ¥©¡¼¥ë¥È¥á¥Ã¥»¡¼¥¸¤òÄÌÃΤ¹¤ë¤³¤È¤ò¹Íθ¤·¤¿»ÅÁȤߤˤϤʤäƤ¤¤Þ¤¹¡£


¡Ú IErrorHandler ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ ¡Û
Îã³°¤ò°ì¸µ¥Ï¥ó¥É¥ê¥ó¥°¤¹¤ë¤Î¤Ï¡¢ IErrorHandler ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Dispatcher) ¤ò¼ÂÁõ¤·¤¿ÆÈ¼«¤Î¥¯¥é¥¹¤È¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤¬Ä󶡤¹¤ë¥á¥½¥Ã¥É¤Ï°Ê²¼¤Î£²¤Ä¤Ç¤¹¡£

[ ProvideFault ¥á¥½¥Ã¥É ]
ProvideFault ¥á¥½¥Ã¥É ¤Ï¡¢¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤ò¥Ï¥ó¥É¥ê¥ó¥°¤·¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥ÉÆâ¤Ç¥¯¥é¥¤¥¢¥ó¥È¤ËÅϤ¹¥Õ¥©¡¼¥ë¥È¥á¥Ã¥»¡¼¥¸¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¥í¥®¥ó¥°¤Ê¤É¤Î½èÍý¤Ï¤³¤Î¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢¸å½Ò¤Î HandleError ¥á¥½¥Ã¥É¤Ç¹Ô¤¤¤Þ¤¹¡£

¤³¤Î¥á¥½¥Ã¥É¤Î¥Ñ¥é¥á¡¼¥¿¤Ï°Ê²¼¤Î£³¤Ä¤Ç¤¹¡£

error
·¿¤Ï Exception ¥¯¥é¥¹ (System) ¤Ç¤¹¡£
¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤ê¡¢¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤ò¼èÆÀ¤Ç¤­¤Þ¤¹¡£

version
·¿¤Ï MessageVersion ¥¯¥é¥¹ (System.ServiceModel.Channels) ¤Ç¤¹¡£
¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤ê¡¢¸½ºß¤Î SOAP ÄÌ¿® ¤Ë¤ª¤±¤ë SOAP ¤Î¥Ð¡¼¥¸¥ç¥ó¤ò¼èÆÀ¤Ç¤­¤Þ¤¹¡£

fault
·¿¤Ï Message ¥¯¥é¥¹ (System.ServiceModel.Channels) ¤Ç¤¹¡£¤Þ¤¿¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï»²¾ÈÅϤ·¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤¬¡¢ FaultException ¥¯¥é¥¹ (System.ServiceModel) ¤Ç¤¢¤Ã¤¿¾ì¹ç¡¢¤½¤ì¤òɽ¤ï¤¹¥Õ¥©¡¼¥ë¥È ¥á¥Ã¥»¡¼¥¸¤¬¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤ê¼èÆÀ¤Ç¤­¤Þ¤¹¡£¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤¬¡¢ FaultException ¥¯¥é¥¹¤Ç¤Ê¤¤¾ì¹ç¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï null ¤È¤Ê¤ê¤Þ¤¹¡£
¤³¤Î ProvideFault ¥á¥½¥Ã¥ÉÆâ¤Ç Message ¥¯¥é¥¹¤òÀ¸À®¤·¤Æ¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ËÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥¯¥é¥¤¥¢¥ó¥È¤ËÅϤ¹¥Õ¥©¡¼¥ë¥È¥á¥Ã¥»¡¼¥¸¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¤ï¤±¤Ç¤¹¡£

¡¦ProvideFault ¥á¥½¥Ã¥É¤Î¼ÂÁõÎã
FaultException °Ê³°¤Î¡¢¥Ï¥ó¥É¥ë¤µ¤ì¤Ê¤«¤Ã¤¿Îã³°¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¡¢Í½´ü¤»¤Ì¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤È¤¤¤¦ÄÌÃΤò¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¹Ô¤¦¤¿¤á¤Î¼ÂÁõÎã¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
    if (fault != null)
    {
        return;
    }

    FaultReasonText[] reasonTexts =
        new FaultReasonText[]
        {
            new FaultReasonText("ͽ´ü¤»¤Ì¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£", "ja-JP"),
            new FaultReasonText("An unexpected error occurred.", "en-US")
        };
    FaultReason reason = new FaultReason(reasonTexts);
    FaultCode code = FaultCode.CreateReceiverFaultCode("unexpected", "http://schemas.yokoken.net/Hoge");
    FaultException faultException = new FaultException(reason, code);
    MessageFault messageFault = faultException.CreateMessageFault();
    string action = OperationContext.Current.IncomingMessageHeaders.Action;
    fault = Message.CreateMessage(version, messageFault, action);
}


[ HandleError ¥á¥½¥Ã¥É ]
HandleError ¥á¥½¥Ã¥É ¤Ï¡¢¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤È¡¢ÄÌ¿®»þ¤ËȯÀ¸¤·¤¿Îã³°¤ò¥Ï¥ó¥É¥ê¥ó¥°¤·¤Þ¤¹¡£
¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤Ï¡¢ProvideFault ¥á¥½¥Ã¥É¤¬Àè¤Ë¥Ï¥ó¥É¥ê¥ó¥°¤·¤Þ¤¹¡£¤½¤Î¸å¡¢¤³¤Î¥á¥½¥Ã¥É¤¬¥Ï¥ó¥É¥ê¥ó¥°¤·¤Þ¤¹¡£ProvideFault ¥á¥½¥Ã¥É¤Ç¥Õ¥©¡¼¥ë¥È ¥á¥Ã¥»¡¼¥¸¤òÀ¸À®¤·¤¿¾ì¹ç¤Ç¤â¡¢HandleError ¥á¥½¥Ã¥É¤Ç¥Ï¥ó¥É¥ê¥ó¥°¤µ¤ì¤ëÎã³°¤ÏÊѤï¤ê¤Þ¤»¤ó¡£¤Ä¤Þ¤ê¡¢¥µ¡¼¥Ó¥¹ÆâÉô¤Ç¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤¬¥Ï¥ó¥É¥ê¥ó¥°¤µ¤ì¤Þ¤¹¡£
¥í¥®¥ó¥°¤ä¡¢MSMQ ¤ÎÍ­³²¥á¥Ã¥»¡¼¥¸ ( Poison Message ) ¤Î½èÍý¤Ê¤É¤Ï¤³¤Î¥á¥½¥Ã¥É¤Ç¹Ô¤¤¤Þ¤¹¡£

¤³¤Î¥á¥½¥Ã¥É¤Î¥Ñ¥é¥á¡¼¥¿¤Ï°Ê²¼¤Î£±¤Ä¤Ç¤¹¡£

error
·¿¤Ï Exception ¥¯¥é¥¹ (System) ¤Ç¤¹¡£
¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤ê¡¢¥µ¡¼¥Ó¥¹ÆâÉô¤«¤é¥¹¥í¡¼¤µ¤ì¤¿Îã³°¤ä¡¢ÄÌ¿®»þ¤ËȯÀ¸¤·¤¿Îã³°¤ò¼èÆÀ¤Ç¤­¤Þ¤¹¡£

¡¦Ìá¤êÃͤˤĤ¤¤Æ
¤³¤Î¥á¥½¥Ã¥É¤ÎÌá¤êÃÍ¤Ï bool ·¿¤ÎÃͤǤ¹¡£true ¤òÊÖ¤·¤¿¾ì¹ç¡¢Îã³°¤Ï¥Ï¥ó¥É¥ë¤µ¤ì¤¿¤â¤Î¤È¤·¤Æ°·¤ï¤ì¡¢false ¤òÊÖ¤·¤¿¾ì¹ç¡¢Îã³°¤Ï¥Ï¥ó¥É¥ë¤µ¤ì¤Ê¤«¤Ã¤¿¤â¤Î¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
MSMQ ¤ÇÍ­³²¥á¥Ã¥»¡¼¥¸¤ò½èÍý¤·¤¿Åù¤Î¾ì¹ç¤Ï¡¢¤³¤³¤Ç true ¤òÊÖ¤·¤Þ¤¹¡£²¿¤â½èÍý¤·¤Ê¤«¤Ã¤¿¤ê¡¢¥í¥®¥ó¥°¤Î¤ß¤ò¹Ô¤¦¾ì¹ç¤Ï false ¤òÊÖ¤·¤Þ¤¹¡£
( ¤¿¤À¡¢ÀµÄ¾¤ÊÏᢤ³¤ì¤é¤Î¶ñÂÎŪ¤Ê°ã¤¤¤ÏÉÔÌÀ¤Ç¤¹¡£¿§¡¹»î¤·¤Æ¤ß¤Þ¤·¤¿¤¬¡¢ true ¤òÊÖ¤·¤Æ¤â false ¤òÊÖ¤·¤Æ¤â¡¢µóư¤Î°ã¤¤¤Ï¸«¼õ¤±¤é¤ì¤Þ¤»¤ó¤Ç¤·¤¿¡£Reflector ¤Ç¥³¡¼¥É¤òÇÁ¤¤¤Æ¤ß¤ë¤È¡¢°ì±þÆÃÄê¤Î¾ò·ï²¼¤Ë¤ª¤¤¤Æ false ¤¬ÊÖ¤µ¤ì¤¿¾ì¹ç¤Ë¡¢¥Á¥ã¥Í¥ë¤ÎÃæ»ß½èÍý¤ò¹Ô¤¦¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£ )

¡¦HandleError ¥á¥½¥Ã¥É¤Î¼ÂÁõÎã
FaultException °Ê³°¤Î¡¢¥Ï¥ó¥É¥ë¤µ¤ì¤Ê¤«¤Ã¤¿Îã³° ( ÄÌ¿®»þ¤ÎÎã³°´Þ¤à ) ¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¡¢Îã³°¤Î¾ðÊó¤ò¥³¥ó¥½¡¼¥ë¤Ø½ÐÎϤ¹¤ë¤¿¤á¤Î¼ÂÁõÎã¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

public bool HandleError(Exception error)
{
    if (error is FaultException)
    {
        return false;
    }
    string errorType = error.GetType().FullName;
    string errorMessage = error.Message;
    string errorStackTrace = error.StackTrace;
    Console.WriteLine("[ Error ]\r\nType: {0}\r\nMessage: {1}\r\nStack Trace: {2}", errorType, errorMessage, errorStackTrace);
    return false;
}


¡Ú ¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤ÎÅÐÏ¿ ¡Û

[ ChannelDispatcher ¤ØÅÐÏ¿ ]
IErrorHandler ¼ÂÁõ¥¯¥é¥¹¤òÄêµÁ¤·¤¿¤À¤±¤Ç¤Ï¡¢¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤È¤·¤ÆÆ°ºî¤·¤Æ¤¯¤ì¤Þ¤»¤ó¡£IErrorHandler ¼ÂÁõ¥¯¥é¥¹¤òÅÐÏ¿¤¹¤ë½èÍý¤ò¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
ÅÐÏ¿¤Ï¡¢ChannelDispatcher ¥¯¥é¥¹ (System.ServiceModel.Dispatcher) ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î¡¢ErrorHandlers ¥×¥í¥Ñ¥Æ¥£ ¤ËÂФ·¤Æ¹Ô¤¤¤Þ¤¹¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë¥³¥ì¥¯¥·¥ç¥ó¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤ÆIErrorHandler ¼ÂÁõ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÄɲ䷤Ƥä¤ê¤Þ¤¹¡£

ServiceHostBase ¥¯¥é¥¹ (System.ServiceModel) ¤Î ChannelDispatchers ¥×¥í¥Ñ¥Æ¥£ ¤Ë¤Ï¡¢ChannelDispatcherCollection ¥¯¥é¥¹ (System.ServiceModel.Dispatcher) ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥³¥ì¥¯¥·¥ç¥ó¤«¤é¡¢ChannelDispatcher ¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤Î¥³¥ì¥¯¥·¥ç¥ó¼«ÂΤϡ¢ChannelDispatcherBase ¥¯¥é¥¹ (System.ServiceModel.Channels) ¤Î¥³¥ì¥¯¥·¥ç¥ó¤È¤·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ChannelDispatcherBase ¥¯¥é¥¹¤Ï¡¢ChannelDispacher ¥¯¥é¥¹¤Î´ðËÜ¥¯¥é¥¹¤Ç¤¹¤¬¡¢ErrorHandlers ¥×¥í¥Ñ¥Æ¥£¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤Ä¤Þ¤ê¡¢ChannelDispacher ¥¯¥é¥¹¤Ø¤Î¥­¥ã¥¹¥È¤¬¹Ô¤¨¤ë¤«¸¡¾Ú¤·¡¢¥­¥ã¥¹¥È¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ ( ¤¿¤À¡¢ChannelDispatcherBase ¥¯¥é¥¹¤ÏÃê¾Ý¥¯¥é¥¹¤Ç¤¢¤ê¡¢¤³¤Î¥¯¥é¥¹¤ÎÇÉÀ¸¥¯¥é¥¹¤Ï ChannelDispacher ¥¯¥é¥¹¤·¤«¤¢¤ê¤Þ¤»¤ó¡£¤Ä¤Þ¤ê¡¢»ö¼Â¾åChannelDispatcherCollection ¥¯¥é¥¹¤Ï ChannelDispacher ¤Î¥³¥ì¥¯¥·¥ç¥ó¤Ç¤¹¡£¤·¤«¤·¡¢¤½¤ì¤Ç¤â¥­¥ã¥¹¥È¤¬¤Ç¤­¤ë¤«¤É¤¦¤«¤Î¸¡¾Ú¤Ï¤·¤Ã¤«¤ê¹Ô¤¦¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£ )

[ ÅÐÏ¿¤Ï¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤Ç¹Ô¤¦ ]
ÅÐÏ¿½èÍý¤ÏÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤Ç¹Ô¤¤¤Þ¤¹¡£¥Ó¥Ø¥¤¥Ó¥¢¤«¤é¤Ç¤Ï¤Ê¤¯¡¢¥µ¡¼¥Ó¥¹ ¥Û¥¹¥È¤òľÀÜÁàºî¤·¤ÆÅÐÏ¿½èÍý¤ò¹Ô¤Ã¤Æ¤â¡¢¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤Ïưºî¤·¤Æ¤¯¤ì¤Þ¤»¤ó¡£
¥Ó¥Ø¥¤¥Ó¥¢¤Ï¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤Þ¤¿¤Ï¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢¤È¤Ê¤ê¤Þ¤¹¡£
ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤Îµ­»ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ë
ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ë £²


¡Ú ¼ÂÁõÎã ¡Û
¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤Î¼ÂÁõÎã¤È¡¢¤½¤ì¤òŬÍѤ¹¤ë¤¿¤á¤Î¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤Î¼ÂÁõÎã¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

¥¨¥é¡¼ ¥Ï¥ó¥É¥é
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;

internal sealed class ErrorHandler : IErrorHandler
{
    public bool HandleError(Exception error)
    {
        if (error is FaultException)
        {
            return false;
        }
        string errorType = error.GetType().FullName;
        string errorMessage = error.Message;
        string errorStackTrace = error.StackTrace;
        Console.WriteLine("[ Error ]\r\nType: {0}\r\nMessage: {1}\r\nStack Trace: {2}", errorType, errorMessage, errorStackTrace);
        return false;
    }

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {
        if (fault != null)
        {
            return;
        }

        FaultReasonText[] reasonTexts =
            new FaultReasonText[]
            {
                new FaultReasonText("ͽ´ü¤»¤Ì¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£", "ja-JP"),
                new FaultReasonText("An unexpected error occurred.", "en-US")
            };
        FaultReason reason = new FaultReason(reasonTexts);
        FaultCode code = FaultCode.CreateReceiverFaultCode("unexpected", "http://schemas.yokoken.net/Hoge");
        FaultException faultException = new FaultException(reason, code);
        MessageFault messageFault = faultException.CreateMessageFault();
        string action = OperationContext.Current.IncomingMessageHeaders.Action;
        fault = Message.CreateMessage(version, messageFault, action);
    }
}


¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢
using System;
using System.Collections.ObjectModel;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;

[AttributeUsage(AttributeTargets.Class)]
public class ErrorHandlerAttribute : Attribute, IServiceBehavior
{
    private IErrorHandler errorHandler;

    public ErrorHandlerAttribute()
    {
        this.errorHandler = new ErrorHandler();
    }

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (ChannelDispatcherBase dispatcherBase in serviceHostBase.ChannelDispatchers)
        {
            ChannelDispatcher dispatcher = dispatcherBase as ChannelDispatcher;
            if (dispatcher == null)
            {
                continue;
            }
            dispatcher.ErrorHandlers.Add(this.errorHandler);
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }
}


¤³¤ì¤Ç¡¢¥µ¡¼¥Ó¥¹ ¥¯¥é¥¹¤Ë ErrorHandlerAttribute ¥¯¥é¥¹¤ò°À­¤È¤·¤ÆÉղ乤ì¤Ð¡¢¥µ¡¼¥Ó¥¹¤Ë¥¨¥é¡¼ ¥Ï¥ó¥É¥é¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£
¥¿¥°: .NET C# WCF Îã³°½èÍý
2007/04/22 23:28
Åö½é¤ÎͽÄê¤Ç¤Ï¡¢°ì¸µÅª¤Ê¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤ÎÊýË¡¤ò¾Ò²ð¤¹¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤½¤ÎÁ°¤Ë¡¢¥µ¡¼¥Ó¥¹¤Î¥«¥¹¥¿¥à°À­¤È¤·¤ÆÅ¬ÍѤ¹¤ëÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ëÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£
¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ä¥³¡¼¥É¤«¤é¡¢¥µ¡¼¥Ó¥¹¥Û¥¹¥È¤ËÂФ·¤Æ¥Ó¥Ø¥¤¥Ó¥¢¤òŬÍѤ¹¤ëÊýË¡¤Ï¡¢¤³¤Á¤é¤Î¡ÖÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ë¡×¤È¤¤¤¦µ­»ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¥Ó¥Ø¥¤¥Ó¥¢¤Ë¤Ï¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥³¥ó¥È¥é¥¯¥È ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥ª¥Ú¥ì¡¼¥·¥ç¥ó ¥Ó¥Ø¥¤¥Ó¥¢¤Î4¼ïÎब¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤Î¤¦¤Á¡¢¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢°Ê³°¤Î¥Ó¥Ø¥¤¥Ó¥¢¤Ï¡¢¥«¥¹¥¿¥à°À­¤È¤·¤ÆÄêµÁ¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
Î㤨¤Ð¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤Ï IServiceBehavior ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Description) ¤ò¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤È¤·¤ÆÄêµÁ¤·¡¢¹¹¤Ë Attribute ¥¯¥é¥¹ (System) ¤ò·Ñ¾µ¤µ¤»¤Þ¤¹¡£


°Ê²¼¤Ë¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤Î¼ÂÁõÎã¤ò¼¨¤·¤Þ¤¹¡£

using System;
using System.Collections.ObjectModel;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;

[AttributeUsage(AttributeTargets.Class)]
public sealed class HelloWorldBehaviorAttribute : Attribute, IServiceBehavior
{
    private bool silent;

    public bool Silent
    {
        get
        {
            return this.silent;
        }
        set
        {
            this.silent = value;
        }
    }

    public HelloWorldBehaviorAttribute()
    {
        this.silent = false;
    }

    void IServiceBehavior.AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {
    }

    void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        if (this.silent)
        {
            return;
        }

        serviceHostBase.Opened +=
            delegate
            {
                Console.WriteLine("Hello World !");
            };
    }

    void IServiceBehavior.Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }
}

¤³¤Î¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¤òŬÍѤ¹¤ë¤È¡¢Á°²ó¤ÈƱ¤¸¤¯¡¢¥µ¡¼¥Ó¥¹ ¥Û¥¹¥È¤Î¥ª¡¼¥×¥ó»þ¤Ë¥³¥ó¥½¡¼¥ë¤Ø "Hello World !" ¤È½ÐÎϤ·¤Þ¤¹¡£

°Ê²¼¤Ë¡¢Å¬ÍÑÎã¤ò¼¨¤·¤Þ¤¹¡£

[HelloWorldBehavior(Silent = false)]
public sealed class Service1 : IService1
{
    /*...*/
}
¥¿¥°: .NET C# WCF
2007/04/16 01:40
Web ¥µ¥¤¥Èºî¤ê¤Á¤ç¤³¤Á¤ç¤³¿Ê¤á¤Æ¤Þ¤¹¤±¤É¡¦¡¦¡¦¡¢ÌÌÅݤ¯¤µ¤¤¤Ç¤¹¤Í£÷
³«È¯¤ÈƱ¤¸¤¯¡¢½Ð¤À¤·¤¬°ìÈÖÌÌÅݤǤ¹¤Í¡£
¤¢¤È¡¢XML ¥Ù¡¼¥¹¤Ç¤½¤Î¤Þ¤Þ¸ø³«¤·¤è¤¦¤È»×¤Ã¤Æ¤Þ¤·¤¿¤±¤É¡¢¤Á¤ç¤Ã¤È̵Íý¤½¤¦(´¡¦ω¡¦¡®)
¤À¤Ã¤Æ¡¢FireFox ¤À¤È¡¢¼ÂÂλ²¾È¤¬¤¦¤Þ¤¯°·¤¨¤Ê¤«¤Ã¤¿¤êJavaScript¤¬¤¦¤Þ¤¯Æ°¤«¤Ê¤«¤Ã¤¿¤ê¤¹¤ë¤ó¤À¤â¤ó(´¡¦ω¡¦¡®)
¤·¤ç¤¦¤¬¤Ê¤¤¤«¤é¡¢XSLTÊÑ´¹¤·¤Æ¤«¤é¥µ¡¼¥Ð¡¼¤Ë¥¢¥Ã¥×¥í¡¼¥É¤¹¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£
¤¢¤ì¡¢¤½¤¦¤¹¤ë¤ÈFC2¤Ç¤âÊ̤ˤ¤¤¤¤Î¤«¡¦¡¦¡¦¡£¤ï¤¶¤ï¤¶Â¾¤Î½êõ¤·¤ÆÅÐÏ¿¤Þ¤ÇºÑ¤Þ¤»¤¿¤È¤¤¤¦¤Î¤Ë(  Žß§¥ŽÒ )ޏŽÞަަަޝ

¤Þ¤¡¡¢¤½¤ì¤Ï¤¤¤¤¤È¤·¤Æ¡¢¤È¤ê¤¢¤¨¤ºWeb ¥µ¥¤¥È¤Ç¤­¤ë¤Þ¤Ç¤Ï¡¢º£¤Þ¤ÇÄ̤ꤳ¤Î¥Ö¥í¥°¤Ç WCF ¤ò°·¤Ã¤Æ¤¤¤³¤¦¤«¤È»×¤¤¤Þ¤¹¡£ ( Web ¥µ¥¤¥È¤Ç¤­¤¿¤¢¤È¤â¡¢¤³¤Î¥Ö¥í¥°¤Ç¤â WCF ¤ò°·¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡£ )
¤Á¤Ê¤ß¤Ë¡¢¼¡²ó¤Ï WCF ¤Ç¤Î°ì¸µÅª¤Ê¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤ÎÊýË¡¤ò²òÀ⤷¤è¤¦¤«¤È»×¤¤¤Þ¤¹¡£Àè¤Û¤É½ñ¤¤¤¿ ÆÈ¼«¥Ó¥Ø¥¤¥Ó¥¢¤Îµ­»ö ¤Ï¡¢¼Â¤Ï¤³¤Î¤¿¤á¤ÎÉÛÀФÀ¤Ã¤¿¤ê¤·¤Þ¤¹ ¡°¡°¡¨
¥¿¥°:
2007/04/16 01:02
WCF ¤Ç¤ÏÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡Ú ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤òÄêµÁ ¡Û
¥Ó¥Ø¥¤¥Ó¥¢¤Ë¤Ï¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥³¥ó¥È¥é¥¯¥È¥Ó¥Ø¥¤¥Ó¥¢¡¢¥ª¥Ú¥ì¡¼¥·¥ç¥ó¥Ó¥Ø¥¤¥Ó¥¢¤Î4¼ïÎब¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤é¤Ï¡¢¤½¤ì¤¾¤ìÍøÍѤǤ­¤ëŬÍÑÊýË¡¤¬¡¢°Ê²¼¤Î¤è¤¦¤Ë°Û¤Ê¤ê¤Þ¤¹¡£
  • ¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢¤Ï¡¢¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ÇŬÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
  • ¥³¥ó¥È¥é¥¯¥È ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥ª¥Ú¥ì¡¼¥·¥ç¥ó ¥Ó¥Ø¥¤¥Ó¥¢¤Ï¡¢¥×¥í¥°¥é¥à¤Ç¥«¥¹¥¿¥à°À­¤È¤·¤ÆÅ¬ÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
  • Á´¤Æ¤Î¥Ó¥Ø¥¤¥Ó¥¢¤Ï¡¢¥×¥í¥°¥é¥à¤Ç ServiceHost ¥ª¥Ö¥¸¥§¥¯¥È¤ò¥«¥¹¥¿¥Þ¥¤¥º¤·¤ÆÅ¬ÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

[ ¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢ ]
IServiceBehavior ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Description) ¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Çɽ¤µ¤ì¤Þ¤¹¡£¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë¤Ï¡¢°Ê²¼¤Î£³¤Ä¤Î¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

AddBindingParameters ¥á¥½¥Ã¥É
ApplyDispatchBehavior ¥á¥½¥Ã¥É
Validate ¥á¥½¥Ã¥É


[ ¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢ ]
IEndopointBehavior ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Description) ¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Çɽ¤µ¤ì¤Þ¤¹¡£
¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë¤Ï¡¢°Ê²¼¤Î£´¤Ä¤Î¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

AddBindingParameters
ApplyClientBehavior
ApplyDispatchBehavior
Validate


[ ¥³¥ó¥È¥é¥¯¥È ¥Ó¥Ø¥¤¥Ó¥¢ ]
IContractBehavior ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Description) ¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Çɽ¤µ¤ì¤Þ¤¹¡£¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë¤Ï¡¢°Ê²¼¤Î£´¤Ä¤Î¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

AddBindingParameters ¥á¥½¥Ã¥É
ApplyClientBehavior ¥á¥½¥Ã¥É
ApplyDispatchBehavior ¥á¥½¥Ã¥É
Validate ¥á¥½¥Ã¥É


[ ¥ª¥Ú¥ì¡¼¥·¥ç¥ó ¥Ó¥Ø¥¤¥Ó¥¢ ]
IOperationBehavior ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ (System.ServiceModel.Description) ¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Çɽ¤µ¤ì¤Þ¤¹¡£¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë¤Ï¡¢°Ê²¼¤Î£´¤Ä¤Î¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

AddBindingParameters ¥á¥½¥Ã¥É
ApplyClientBehavior ¥á¥½¥Ã¥É
ApplyDispatchBehavior ¥á¥½¥Ã¥É
Validate ¥á¥½¥Ã¥É


³Æ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ç¤Ï¶¦Ä̤Î̾Á°¤Î¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£ ( IServiceBehavior ¤Î¤ß¡¢ApplyClientBehavior ¥á¥½¥Ã¥É¤¬Â¸ºß¤·¤Þ¤»¤ó¡£ )

AddBindingParameters ¥á¥½¥Ã¥É
¥Ð¥¤¥ó¥Ç¥£¥ó¥°Í×ÁǤ˥ǡ¼¥¿¤òÄɲ乤뤿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£

ApplyClientBehavior ¥á¥½¥Ã¥É
¥¯¥é¥¤¥¢¥ó¥È¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¥«¥¹¥¿¥Þ¥¤¥º¤ò¹Ô¤¦¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£

ApplyDispatchBehavior ¥á¥½¥Ã¥É
¥µ¡¼¥Ó¥¹¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¥«¥¹¥¿¥Þ¥¤¥º¤ò¹Ô¤¦¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£

Validate ¥á¥½¥Ã¥É
¥Ó¥Ø¥¤¥Ó¥¢¤òŬÍѤ¹¤ë¤¿¤á¤ÎÁ°Äó¾ò·ï¤Î¸¡¾Ú¤ò¹Ô¤¤¤Þ¤¹¡£


[ ¼ÂÁõ¤Ë¤Ä¤¤¤Æ ]
¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤òºîÀ®¤¹¤ë¾ì¹ç¡¢Å¬Àڤʥ¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò¼ÂÁõ¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ÅöÁ³¡¢ÆÈ¼«¤Î¥×¥í¥Ñ¥Æ¥£¤òÍѰդ¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Ï¡¢³«È¯¼Ô¤¬¥³¡¼¥É¤«¤éľÀÜÁàºî¤¹¤ë¤³¤È¤âÁÛÄꤵ¤ì¤ë¤¿¤á¡¢¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ÏÌÀ¼¨Åª¤Ë¼ÂÁõ¤·¤¿Êý¤¬Îɤ¤¤«¤È»×¤¤¤Þ¤¹¡£


[ ¼ÂÁõÎã ]
°Ê²¼¤Ë¡¢¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Î¼ÂÁõÎã¤ò¼¨¤·¤Þ¤¹¡£

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Collections.ObjectModel;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;

public sealed class HelloWorldBehavior : IServiceBehavior
{
    private bool silent;

    public bool Silent
    {
        get
        {
            return this.silent;
        }
        set
        {
            this.silent = value;
        }
    }

    public HelloWorldBehavior()
    {
        this.silent = false;
    }

    void IServiceBehavior.AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {
    }

    void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        if (this.silent)
        {
            return;
        }

        serviceHostBase.Opened +=
            delegate
            {
                Console.WriteLine("Hello World !");
            };
    }

    void IServiceBehavior.Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }
}

¤³¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÀßÄꤹ¤ë¤È¡¢¥µ¡¼¥Ó¥¹ ¥Û¥¹¥È¤¬¥ª¡¼¥×¥ó¤·¤¿»þ¤Ë¥³¥ó¥½¡¼¥ë¤Ø "Hello World !" ¤È¤¤¤¦Ê¸»úÎó¤ò½ÐÎϤ¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Silent ¥×¥í¥Ñ¥Æ¥£¤¬ true ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Îưºî¤òÄɲä·¤Þ¤»¤ó¡£


¡Ú ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤ò¥×¥í¥°¥é¥à¤«¤é ServiceHost ¤ËŬÍѤ¹¤ë ¡Û
¥×¥í¥°¥é¥à¤«¤é ServiceHost ¤ËŬÍѤ¹¤ë¾ì¹ç¡¢ÆÃÊ̤ʽèÍý¤ÏÉÔÍפǡ¢Ä̾ï¤Î¥Ó¥Ø¥¤¥Ó¥¢ÀßÄêÊýË¡¤ÈÊѤï¤ê¤Þ¤»¤ó¡£¥³¡¼¥É¤Ç¥Ó¥Ø¥¤¥Ó¥¢¤òÀßÄꤹ¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤Îµ­»ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

C#¤È½ô¡¹ - WCF¤Î¥Û¥¹¥Æ¥£¥ó¥°


¡Ú  ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤ò¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ÇŬÍѤ¹¤ë ¡Û
¥µ¡¼¥Ó¥¹ ¥Ó¥Ø¥¤¥Ó¥¢¡¢¥¨¥ó¥É¥Ý¥¤¥ó¥È ¥Ó¥Ø¥¤¥Ó¥¢¤Ï¡¢¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤«¤éŬÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤òÄêµÁ¤·¤¿¤À¤±¤Ç¤Ï¡¢¥³¡¼¥É¤«¤é¤Ï°·¤¨¤Æ¤â¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç°·¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç°·¤¦¤¿¤á¤Ë¤Ï¡¢³ÈÄ¥¥¨¥ì¥á¥ó¥È¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

[ ³ÈÄ¥¥¨¥ì¥á¥ó¥È ¥¯¥é¥¹ ]
³ÈÄ¥¥¨¥ì¥á¥ó¥È¤òÄêµÁ¤¹¤ë¤Ë¤Ï¡¢ BehaviorExtensionElement ¥¯¥é¥¹ (System.ServiceModel.Configuration) ¤Î·Ñ¾µ¥¯¥é¥¹¤òÄêµÁ¤·¤Þ¤¹¡£
BehaviorExtensionElement ¥¯¥é¥¹¤Ë¤Ï¡¢°Ê²¼¤Î2¤Ä¤ÎÃê¾Ý¥á¥ó¥Ð¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

BehaviorType ¥×¥í¥Ñ¥Æ¥£
¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Î·¿¾ðÊó¤òÊÖ¤¹¤è¤¦¤Ë¼ÂÁõ¤·¤Þ¤¹¡£

CreateBehavior ¥á¥½¥Ã¥É
¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤ÆÊÖ¤¹¤è¤¦¤Ë¼ÂÁõ¤·¤Þ¤¹¡£
¤³¤ÎºÝ¡¢³ÈÄ¥¥¨¥ì¥á¥ó¥È¤Î°À­ ( ¸å½Ò ) ¤ÇÀßÄꤵ¤ì¤¿Ãͤò¡¢¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ËÈ¿±Ç¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


[ ³ÈÄ¥¥¨¥ì¥á¥ó¥È¤Î°À­ ]
¥Ó¥Ø¥¤¥Ó¥¢ ¥¯¥é¥¹¤Ë¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤·¤¿¾ì¹ç¡¢³ÈÄ¥¥¨¥ì¥á¥ó¥È¤Ç¤â¤½¤ì¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¤¿¤á¤Ë¤Ï¡¢³ÈÄ¥¥¨¥ì¥á¥ó¥È ¥¯¥é¥¹¤Ë¥×¥í¥Ñ¥Æ¥£¤òÍѰդ·¤Æ¡¢ConfigurationPropertyAttribute ¥¯¥é¥¹ (System.Configuration) ¤ò¥×¥í¥Ñ¥Æ¥£¤Î°À­¤È¤·¤ÆÉղ乤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


[ ¼ÂÁõÎã ]
Àè¤Û¤É¤ÎÎã¤ÇÄêµÁ¤·¤¿ HelloWorldBehavior ¥Ó¥Ø¥¤¥Ó¥¢¤ò¡¢¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç°·¤¦¤¿¤á¤Î³ÈÄ¥¥¨¥ì¥á¥ó¥È ¥¯¥é¥¹¤ÎÎã¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Collections.ObjectModel;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;

public sealed class HelloWorldElement : BehaviorExtensionElement
{
    public override Type BehaviorType
    {
        get
        {
            return typeof(HelloWorldBehavior);
        }
    }

    protected override object CreateBehavior()
    {
        HelloWorldBehavior result = new HelloWorldBehavior();
        result.Silent = this.Silent;
        return result;
    }

    [ConfigurationProperty("silent", DefaultValue = false)]
    public bool Silent
    {
        get
        {
            return (bool)base["silent"];
        }
        set
        {
            base["silent"] = value;
        }
    }

    private ConfigurationPropertyCollection properties;

    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            if (this.properties == null)
            {
                ConfigurationPropertyCollection propertys = new ConfigurationPropertyCollection();
                propertys.Add(new ConfigurationProperty("silent", typeof(bool), false, null, null, ConfigurationPropertyOptions.None));
                this.properties = propertys;
            }
            return this.properties;

        }
    }
}


[ ¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ÇŬÍÑ ]
ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤ò¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ÇŬÍѤ¹¤ë¾ì¹ç¡¢ [ system.serviceModel ] - [ extensions ] ¥»¥¯¥·¥ç¥ó¤Ë¡¢³ÈÄ¥¥¨¥ì¥á¥ó¥È¤òÄɲ䷤ơ¢¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç°·¤¦ºÝ¤Î̾¾Î¤òÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

Àè¤Û¤ÉÄêµÁ¤·¤¿³ÈÄ¥¥¨¥ì¥á¥ó¥È¤ò extensions ¥»¥¯¥·¥ç¥ó¤ËÄɲ乤ëÎã¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£ ( ¥¢¥»¥ó¥Ö¥ê̾¤È³ÈÄ¥¥¨¥ì¥á¥ó¥È¤Î̾Á°¶õ´Ö¤Ï¡¢¶¦¤Ë "WCFCustomize" ¤È¤·¤Þ¤·¤¿¡£ )

<extensions>
    <behaviorExtensions>
        <add name="helloWorld" type="WCFCustomize.HelloWorldElement, WCFCustomize, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </behaviorExtensions>
</extensions>

extensions ¥»¥¯¥·¥ç¥ó¤Ë³ÈÄ¥¥¨¥ì¥á¥ó¥È¤òÄɲ乤ë¤È¡¢¤½¤ÎºÝ¤Ë name °À­¤Ë»ØÄꤷ¤¿Ì¾¾Î¤ò¥»¥¯¥·¥ç¥ó̾¤È¤·¤Æ¡¢bihavior ¥»¥¯¥·¥ç¥óÆâ¤Ë¤ÆÀßÄꤹ¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£
°Ê²¼¤Ë¡¢»ÈÍÑÎã¤ò¼¨¤·¤Þ¤¹¡£

<behaviors>
    <serviceBehaviors>
        <behavior name="SampleBehavior">
            <helloWorld silent="false"/>
        </behavior>
    </serviceBehaviors>
</behaviors>

¤³¤ì¤Ç¡¢ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤¬¥µ¡¼¥Ó¥¹¤ËŬÍѤµ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¥µ¡¼¥Ó¥¹ ¥Û¥¹¥È¤¬¥ª¡¼¥×¥ó¤·¤¿»þ¤Ë "Hello World !" ¤È½ÐÎϤµ¤ì¤ë¤Ï¤º¤Ç¤¹¡£ ( ¥³¥ó¥½¡¼¥ë¤Ë½ÐÎϤµ¤ì¤ë¤Î¤Ç¡¢¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¤Ç¥»¥ë¥Õ ¥Û¥¹¥Æ¥£¥ó¥°¤·¤Æ¤¯¤À¤µ¤¤¡£ )


¡Ú ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤ò°À­¤È¤·¤ÆÅ¬ÍÑ ¡Û
°Ê²¼¤Îµ­»ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

C#¤È½ô¡¹ - ÆÈ¼«¤Î¥Ó¥Ø¥¤¥Ó¥¢¤òÄêµÁ¤¹¤ë £²

¥¿¥°: .NET C# WCF
2007/04/13 19:57
IIS6.0¤Ç¤Ï¡¢¥ï¡¼¥«¡¼¥×¥í¥»¥¹¤Î¥¢¥«¥¦¥ó¥È¤È¤·¤Æ Network Service ¥¢¥«¥¦¥ó¥È¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£
¤³¤Î¥¢¥«¥¦¥ó¥È¤Ï¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¸¢¤Ê¤É¤¬À©¸Â¤µ¤ì¤Æ¤¤¤Æ¡¢¥í¥°¥Õ¥¡¥¤¥ë¤ò½ÐÎϤ¹¤ë¤³¤È¤¹¤é¤Ç¤­¤Þ¤»¤ó¡£

¤³¤ì¤ò²ò·è¤¹¤ë¤Ë¤Ï¡¢ÂоݤΥե¡¥¤¥ë¡¦¥Ç¥£¥ì¥¯¥È¥ê¤ØÅ¬Àڤʸ¢¸Â¤òÉղ乤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¥¤¥ó¥¹¥È¡¼¥é¤Ç¡¢¤³¤Î¸¢¸ÂÉղäνèÍý¤ò¹Ô¤¤¤¿¤¤¾ì¹ç¡¢¥¤¥ó¥¹¥È¡¼¥é¤Î¥«¥¹¥¿¥àưºî¤Ç¤³¤ì¤ò¹Ô¤¤¤Þ¤¹¡£

°Ê²¼¤ËÎã¤ò¼¨¤·¤Þ¤¹¡£

//using System;
//using System.Configuration.Install;
//using System.IO;
//using System.Security.AccessControl;

[RunInstaller(true)]
public partial class CustomInstaller : Installer
{
    public CustomInstaller()
    {
        InitializeComponent();
    }

    public override void Install(System.Collections.IDictionary stateSaver)
    {
        string assemblyPathName = this.Context.Parameters["assemblypath"];
        int fileDivisionIndex = assemblyPathName.LastIndexOf('\\');
        string installDirectoryPathName = assemblyPathName.Remove(fileDivisionIndex);
        DirectoryInfo installDirectoryInfo = new DirectoryInfo(installDirectoryPathName);
        // ¥¤¥ó¥¹¥È¡¼¥ëÀè¥Ç¥£¥ì¥¯¥È¥ê¤Î ACL ( ¥¢¥¯¥»¥¹À©¸æ¥ê¥¹¥È ) ¤ò¼èÆÀ
        DirectorySecurity installDirectoryACL = installDirectoryInfo.GetAccessControl();
        // Network Service ¥¢¥«¥¦¥ó¥È¤Î½ñ¤­¹þ¤ß¸¢¸Â¤òɽ¤¹¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®
        FileSystemAccessRule writingAuthorityOfWorkerProcess = new FileSystemAccessRule("NT AUTHORITY\\NETWORK SERVICE", FileSystemRights.Write, AccessControlType.Allow);
        // ACL ¤Ë¡¢Network Service ¥¢¥«¥¦¥ó¥È¤Î½ñ¤­¹þ¤ß¸¢¸Â¤òÄɲ乤ë
        installDirectoryACL.AddAccessRule(writingAuthorityOfWorkerProcess);
        // ¥¤¥ó¥¹¥È¡¼¥ëÀè¥Ç¥£¥ì¥¯¥È¥ê¤Î ACL ¤òÀßÄê
        installDirectoryInfo.SetAccessControl(installDirectoryACL);

        base.Install(stateSaver);
    }
}

¤³¤ÎÎã¤Ç¤Ï¡¢¥¤¥ó¥¹¥È¡¼¥ëÀè¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ¡¢Network Service¥¢¥«¥¦¥ó¥È¤¬½ñ¤­¹þ¤ß¤ò¹Ô¤¦¤¿¤á¤Î¸¢¸Â¤òÉղ䷤Ƥ¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Web ¥¢¥×¥ê¤¬¥¤¥ó¥¹¥È¡¼¥ëÀè¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¥í¥°¥Õ¥¡¥¤¥ë¤ò½ÐÎϤ¹¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£



¥¤¥ó¥¹¥È¡¼¥é¡¢¥«¥¹¥¿¥àưºî¼«ÂΤÎÀâÌÀ¤Ï¤³¤³¤Ç¤Ï¾Êά¤·¤Þ¤¹¡£¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
Windows ¥¤¥ó¥¹¥È¡¼¥é¤Ç¤ÎÇÛÃ֤˴ؤ¹¤ë¥Á¥å¡¼¥È¥ê¥¢¥ë
2007/04/05 01:43
Web ¥µ¥¤¥Èºî¤í¤¦¤È»×¤Ã¤Æ¤Þ¤¹¡£ ( ¤Þ¤ÀÁ´Á³¼êÃ失¤Æ¤Ê¤¤¤±¤É )
¤½¤ó¤Ç¡¢¤½¤Ã¤Á¤Ç WCF ´ØÏ¢¤Î¾ðÊó¤ò°·¤Ã¤Æ¤¤¤¯¤Ä¤â¤ê¤Ç¤¹¡£

Web ¥µ¥¤¥È¤Ï XML ¥Ù¡¼¥¹¤Ç¹½ÃÛ¤·¤è¤¦¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£
¤Ç¡¢¤½¤¦¤Ê¤ë¤È FC2 ¤µ¤ó¤Î̵ÎÁ¥Û¡¼¥à¥Ú¡¼¥¸¥¹¥Ú¡¼¥¹¤Ç¤Ï̵Íý¤Ê¤ó¤Ç¤¹¤è¤Í¡¦¡¦¡¦¡£
XML ¥Õ¥¡¥¤¥ë¼«ÂΤÏÇÛÃÖ¤¹¤ë¤³¤È¤¬µö²Ä¤µ¤ì¤Æ¤Þ¤¹¤¬¡¢´Î¿´¤Î XSLT ¥Õ¥¡¥¤¥ë¤¬µö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¤ß¤¿¤¤¤Ê¤ó¤Ç¤¹ orz
Yahoo! ¥¸¥ª¥·¥Æ¥£¡¼¥º ¤Ê¤é XML ¤â XSLT ¤âµö²Ä¤µ¤ì¤Æ¤¤¤ë¤ó¤À¤±¤É¡¢¹­¹ð¤¬¥Ç¥«¥Ç¥«¤È¤·¤Æ¤Æ¤Á¤ç¤Ã¤È¡¦¡¦¡¦¡£

¤É¤Ã¤«¤¤¤¤¥È¥³¤Ê¤¤¤«¤Ê¤¡¡£


¤È¤³¤í¤Ç¡¢ËͤϺ£¤Þ¤Ç XML ¥Ù¡¼¥¹¤Î Web ¥µ¥¤¥È¤ò¥¤¥ó¥¿¡¼¥Í¥Ã¥È¾å¤Ç¸«¤«¤±¤¿¤³¤È¤¬¤Ê¤¤µ¤¤¬¤¹¤ë¤ó¤Ç¤¹¤±¤É¡¢¤Ê¤ó¤Ç¤Ç¤·¤ç¤¦¤«¡©
¥Ç¥¶¥¤¥ó¤ò´°Á´¤ËÅý°ì¤Ç¤­¤ë¤·¡¢Êѹ¹¤Ë¶¯¤¤¤·¡¢¥Ç¥¶¥¤¥ó¤È¹½Â¤¤ÎʬΥ¤â´°Á´¤À¤·¡¢¤½¤ì¤Û¤ÉÆñ¤·¤¯¤â¤Ê¤µ¤½¤¦¤Ê¤ó¤À¤«¤é¡¢¤½¤ì¤Ê¤ê¤ËÉáµÚ¤·¤Æ¤¤¤Æ¤â¤¤¤¤µ¤¤¬¤¹¤ë¤ó¤Ç¤¹¤±¤É ¡°¡°¡¨

º£¤Þ¤Ç¼ÂºÝ¤Ë XML ¥Ù¡¼¥¹¤Î Web ¥µ¥¤¥È¤òºî¤Ã¤¿¤³¤È¤¬¤Ê¤¤¤ó¤Ç¤¹¤±¤É¡¢¤â¤·¤«¤·¤Æ²¿¤«Íî¤È¤··ê¤¬¤¢¤ë¡©
¥¿¥°:
2007/04/03 17:44
¥×¥í¥¸¥§¥¯¥È¤Î¥×¥í¥Ñ¥Æ¥£¤ò³«¤¤¤Æ¥Ó¥ë¥É ¥¤¥Ù¥ó¥È¤Î¥Ú¡¼¥¸¤Ç¼¡¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹¡£


¥Ó¥ë¥ÉÁ°¤Ë¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É ¥é¥¤¥ó
"%programfiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u "$(TargetName)"


¥Ó¥ë¥É¸å¤Ë¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É ¥é¥¤¥ó
"%programfiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i "$(TargetFileName)"


¤³¤ì¤Ç¡¢¥Ó¥ë¥É¤ÈƱ»þ¤Ë¥¢¥»¥ó¥Ö¥ê¤¬ GAC ¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡£
2007/04/01 03:19
º£Æü ( ¤¤¤ä¡¢¤â¤¦ºòÆü¤Ë¤Ê¤ë¤« ) ²æ¤¬²È¤Ë Windows PowerShellÀë¸À! ¤¬ÆÏ¤­¤Þ¤·¤¿¡£

¤Ç¡¢¤Ê¤ó¤«Ëͤâ PowerShell ¤È²¿¤«¤òÏ¢·È¤µ¤»¤¿¤¤¤Ê¤È¤¦¤º¤¦¤º¤·¤Æ¤­¤¿¤Î¤Ç¡¢ºÇ¶á¥Þ¥¤¥Ö¡¼¥à¤Î WCF ¤ò PowerShell ¤Ç°·¤Ã¤Æ¤ß¤è¤¦¤«¤È»×¤¤¤Þ¤¹¡£

¹½À®¤Ï¤³¤ó¤Ê´¶¤¸
  • WCF ¥µ¡¼¥Ó¥¹¤Ï C# ¤ÇºîÀ® ( ¤É¤¦¤»¤À¤«¤é Visual Studio ¤Ï»È¤ï¤º )
  • WCF ¤Î¥Û¥¹¥È¤Ï PowerShell
  • WCF ¤Î¥¯¥é¥¤¥¢¥ó¥È¤â PowerShell


[ 0. ½àÈ÷ ]
¤³¤Îµ­»ö¤Ç¤Ï¡¢´ðËÜŪ¤Ë PowerShell ¤ò»È¤Ã¤Æ¤Û¤È¤ó¤É¤ÎÁàºî¤ò¿Ê¤á¤Æ¤¤¤­¤Þ¤¹¡£

0-1.  ɬÍפʤâ¤Î
°Ê²¼¤Î3¤Ä¤¬¤¢¤ì¤ÐÂç¾æÉפʤϤº¤Ç¤¹¡£


0-2. OS ¤¬ Windows Vista¤Î¾ì¹ç¤ÎÃí°ÕÅÀ
¤â¤·¡¢OS ¤¬ Windows Vista¤Ç¤¢¤ë¾ì¹ç¡¢´ÉÍý¼Ô¸¢¸Â¤òÍ׵ᤵ¤ì¤ë¾ìÌ̤¬¤¢¤ê¤Þ¤¹¡£¤Ê¤Î¤Ç¡¢ OS ¤¬ Windows Vista ¤Î¾ì¹ç¤Ï¡¢PowerShell ¤ò´ÉÍý¼Ô¥â¡¼¥É¤Ç¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£
´ÉÍý¼Ô¥â¡¼¥É¤Ç¼Â¹Ô¤¹¤ë¤Ë¤Ï¡¢PowerShell ¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤ò±¦¥¯¥ê¥Ã¥¯¤·¤Æ [ ´ÉÍý¼Ô¤È¤·¤Æ¼Â¹Ô ] ¤òÁªÂò¤·¤Þ¤¹¡£


0-3. ºî¶È¥Õ¥©¥ë¥À
C ¥É¥é¥¤¥Öľ²¼¤Ë work ¤È¤¤¤¦Ì¾Á°¤Î¥Õ¥©¥ë¥À¤òºîÀ®¤·¡¢¤½¤³¤Çºî¶È¤ò¹Ô¤¦¤³¤È¤Ë¤·¤Þ¤¹¡£
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

(New-Item "C:\work1" -itemType "directory") | Set-Location -path {$_.FullName}


¤³¤ì¤Ç¡¢ work ¥Õ¥©¥ë¥À¤¬ºîÀ®¤µ¤ì¡¢PowerShell ¤Î¥«¥ì¥ó¥È¥Ñ¥¹¤¬ "C:\work" ¤Ë°Üư¤·¤Þ¤¹¡£


[ 1. WCF ¥µ¡¼¥Ó¥¹ºîÀ® ]
1-0. ³µÍ×
¤Þ¤º¤Ï WCF ¥µ¡¼¥Ó¥¹ ¤ò¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê¤È¤·¤ÆºîÀ®¤·¤Þ¤¹¡£
Visual Studio ¤Ï»È¤ï¤º¡¢¥á¥âÄ¢¤Ç¥³¡¼¥É¥Õ¥¡¥¤¥ë¤ò½ñ¤¤¤Æ¡¢¥³¥ó¥Ñ¥¤¥ë¤Ë¤ÏC# ¥³¥ó¥Ñ¥¤¥é¤òPowerShell ¾å¤«¤é°·¤¤¤Þ¤¹¡£


1-1. WCF ¥µ¡¼¥Ó¥¹¤Î³µÍ×
¥¢¥¯¥»¥¹¿ô¤ò¥«¥¦¥ó¥È¤¹¤ë´Êñ¤Ê¥µ¡¼¥Ó¥¹¤Ç¤¹¡£
Access ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤¿¤Ó¤Ë¥«¥¦¥ó¥È¤µ¤ì¤Þ¤¹¡£
GetCount ¥á¥½¥Ã¥É¤Ç¥¢¥¯¥»¥¹¿ô¤ò¼èÆÀ¤Ç¤­¤Þ¤¹¡£
Release ¥á¥½¥Ã¥É¤Ç¥µ¡¼¥Ó¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬²òÊü¤µ¤ì¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¥«¥¦¥ó¥È¤¬¥ê¥»¥Ã¥È¤µ¤ì¤Þ¤¹¡£ ( ¤³¤ÎÄøÅ٤Υµ¡¼¥Ó¥¹¤Ê¤é¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¤½¤Î¤Þ¤Þ¤Ç¡¢¥«¥¦¥ó¥È¤ò 0 ¤ËÀßÄꤹ¤ì¤ÐºÑ¤ß¤Þ¤¹¤¬¡°¡°¡¨ )
¥µ¡¼¥Ó¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¥¯¥é¥¤¥¢¥ó¥ÈËè¤ËÍѰդµ¤ì¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¥¢¥¯¥»¥¹¿ô¤Ï³Æ¥¯¥é¥¤¥¢¥ó¥ÈËè¤Ë¥«¥¦¥ó¥È¤µ¤ì¤Þ¤¹¡£

¥¢¥»¥ó¥Ö¥ê̾
Sample.WCFServices.dll

ÄêµÁ¤¹¤ë·¿
Sample.WCFServices.ICounterService ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹
Sample.WCFServices.CounterService ¥¯¥é¥¹


1-2. ICounterService ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ÎºîÀ®
¤Þ¤º¡¢ ICounterService.cs ¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥á¥âÄ¢¤Ç³«¤­¤Þ¤¹¡£
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

$icounterServiceCodeFile = New-Item "ICounterService.cs" -itemType "file";
notepad $icounterServiceCodeFile.FullName;


¤³¤ì¤Ç¡¢ºî¶È¥Õ¥©¥ë¥À¤Ë ICounterService.cs ¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤¬¥á¥âÄ¢¤Ç³«¤«¤ì¤Þ¤¹¡£

¼¡¤Ë¡¢¥á¥âÄ¢¤Ç°Ê²¼¤Î¥³¡¼¥É¤òޤêÉÕ¤±¤Þ¤¹¡£

using System;
using System.ServiceModel;

namespace Sample.WCFServices
{
    [ServiceContract(Namespace = "http://schemas.sample.net/WCFServices", SessionMode = SessionMode.Allowed)]
    public interface ICounterService
    {
        [OperationContract]
        void Access();

        [OperationContract]
        void Release();

        [OperationContract]
        int GetCount();
    }
}

ޤêÉÕ¤±¤Þ¤·¤¿¤é¡¢Êݸ¤ò¹Ô¤¤¡¢¥á¥âÄ¢¤òÊĤ¸¤Þ¤¹¡£


1-3. CounterService ¥¯¥é¥¹¤ÎºîÀ®
CounterService.cs ¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥á¥âÄ¢¤Ç³«¤­¤Þ¤¹¡£
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

$counterServiceCodeFile = New-Item "CounterService.cs" -itemType "file";
notepad $counterServiceCodeFile.FullName;


¤³¤ì¤Ç¡¢ºî¶È¥Õ¥©¥ë¥À¤Ë CounterService.cs ¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤¬¥á¥âÄ¢¤Ç³«¤«¤ì¤Þ¤¹¡£

¼¡¤Ë¡¢¥á¥âÄ¢¤Ç°Ê²¼¤Î¥³¡¼¥É¤òޤêÉÕ¤±¤Þ¤¹¡£

using System;
using System.ServiceModel;

namespace Sample.WCFServices
{
    [ServiceBehavior(Namespace = "http://schemas.sample.net/WCFServices", InstanceContextMode = InstanceContextMode.PerSession)]
    public class CounterService : ICounterService
    {
        private int count;

        public void Access()
        {
            try
            {
                checked
                {
                    this.count++;
                }
            }
            catch (OverflowException)
            {
                FaultReasonText overflowReasonText = new FaultReasonText("¤â¤¦¿ô¤¨¤é¤ì¤Ê¤¤¡£¡£¡£");
                FaultReason overflowReason = new FaultReason(overflowReasonText);
                FaultCode overflowCode = FaultCode.CreateReceiverFaultCode("overflow", "http://schemas.sample.net/WCFServices/Fault");
                throw new FaultException(overflowReason, overflowCode);
            }
        }

        [OperationBehavior(ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)]
        public void Release()
        {
        }

        public int GetCount()
        {
            return this.count;
        }
    }
}

ޤêÉÕ¤±¤Þ¤·¤¿¤é¡¢Êݸ¤ò¹Ô¤¤¡¢¥á¥âÄ¢¤òÊĤ¸¤Þ¤¹¡£


1-4. ¥¢¥»¥ó¥Ö¥ê¤Ë½ð̾¤òÉÕ¤±¤ë¤¿¤á¤Ë¥­¡¼ ¥Ú¥¢¤òÀ¸À®
¤¨¤Ã¤È¡¢¥¢¥»¥ó¥Ö¥ê¤Ë½ð̾¤òÉÕ¤±¤Þ¤¹¡£¤Ê¤ó¤ÇÉÕ¤±¤ë¤Î¤«¤È¤¤¤¦¤È¡¢º£²ó¡¢¥¯¥é¥¤¥¢¥ó¥È¤â PowerShell ¤ÇºîÀ®¤·¤Þ¤¹¡£¤½¤ÎºÝ¡¢¥¸¥§¥Í¥ê¥Ã¥¯ ¥¯¥é¥¹¤òÍøÍѤ·¡¢¥¸¥§¥Í¥ê¥Ã¥¯ °ú¿ô¤Ë ICounterService ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ØÄꤷ¤Þ¤¹¡£¡¦¡¦¡¦¤Ç¡¢¤É¤¦¤â PowerShell ¤Ç¥¸¥§¥Í¥ê¥Ã¥¯°ú¿ô¤Ë»ØÄꤹ¤ë·¿¤Î¥¢¥»¥ó¥Ö¥ê¤Ï¡¢GAC ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤ß¤¿¤¤¤Ç¤¹¡£¤Ê¤Î¤Ç¡¢Sample.WCFServices.dll ¤Ë½ð̾¤òÉÕ¤±¤Æ GAC ¤ËÅÐÏ¿¤·¤Þ¤¹¡£
¤Þ¤¡¡¢Ê£¿ô¤Î¥¢¥×¥ê¤Ç»²¾È¤µ¤ì¤ë¥¢¥»¥ó¥Ö¥ê¤Ï GAC ¤ËÅÐÏ¿¤¹¤ë¤Ù¤­¤Ç¤¹¤·¤Í¡£( WSDL ¤ò¸ø³«¤·¤Æ¡¢Svcutil.exe ¤Ç¥×¥í¥­¥· ¥¯¥é¥¹¤òÀ¸À®¤¹¤ë¾ì¹ç¤ÏÉÔÍפǤ¹¡£¤Ç¤â¡¢º£²ó¤Ï¤½¤¦¤·¤Þ¤»¤ó¡°¡°¡¨ )

°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

&"$env:programfiles\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe" -k Sample.WCFServices.snk


¤³¤Î¥³¥Þ¥ó¥É¤Ë¤è¤ê¡¢ºî¶È¥Õ¥©¥ë¥À¤Ë Sample.WCFServices.snk ¤È¤¤¤¦Ì¾Á°¤Î¥­¡¼ ¥Ú¥¢ ¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤Þ¤¹¡£


1-5. ¥³¥ó¥Ñ¥¤¥ë
1-2 ¤È 1-3 ¤ÇºîÀ®¤·¤¿£²¤Ä¤Î¥³¡¼¥É¥Õ¥¡¥¤¥ë¤ò¡¢¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê·Á¼°¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹¡£
 °Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

&"$env:windir/Microsoft.NET/Framework/v2.0.50727/csc.exe" /out:"Sample.WCFServices.dll" /target:library /lib:"$env:windir\Microsoft.NET\Framework\v3.0\Windows Communication Foundation" /reference:"System.ServiceModel.dll" /optimize+ /keyfile:"Sample.WCFServices.snk" *.cs;


¤³¤Î¥³¥Þ¥ó¥É¤Ë¤è¤ê¡¢£²¤Ä¤Î¥³¡¼¥É¥Õ¥¡¥¤¥ë¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¡¢ºî¶È¥Õ¥©¥ë¥À¤Ë Sample.WCFServices.dll ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£¤Þ¤¿¡¢Àè¤Û¤ÉÀ¸À®¤·¤¿¥­¡¼ ¥Ú¥¢¤Ë¤è¤ê¡¢¥¢¥»¥ó¥Ö¥ê¤Ë½ð̾¤¬»Ü¤µ¤ì¤Þ¤¹¡£


1-6. GAC ¤ËÅÐÏ¿
1-4 ¤Ç²òÀ⤷¤¿¤è¤¦¤Ë¡¢º£²ó¤Ï WCF ¥µ¡¼¥Ó¥¹¤Î¥¢¥»¥ó¥Ö¥ê¤ò GAC ¤Ø¤ÈÅÐÏ¿¤·¤Þ¤¹¡£
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

&"$env:programfiles\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i "Sample.WCFServices.dll"


¤³¤Î¥³¥Þ¥ó¥É¤Ë¤è¤ê¡¢ Sample.WCFService.dll ¤¬ GAC ¤Ø¤ÈÅÐÏ¿¤µ¤ì¤Þ¤¹¡£

¤Ê¤ª¡¢¸å¤Ç Sample.WCFService.dll ¤ò GAC ¤«¤éºï½ü¤¹¤ëºÝ¤Ë¤Ï¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤Çºï½ü²Äǽ¤Ç¤¹¡£ ( º£¤Ï¤Þ¤Àºï½ü¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¤Í¡£ )

&"$env:programfiles\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u "Sample.WCFServices"



[ 2. PowerShell ¤Ç WCF ¤ò¥Û¥¹¥Æ¥£¥ó¥° ]
ExecuteCounterServiceHosting ¤È¤¤¤¦´Ø¿ô¤òÄêµÁ¤·¡¢¤½¤ÎÃæ¤Ç¥Û¥¹¥Æ¥£¥ó¥°¤Î°ìÏ¢¤Î½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢NetTcpBinding ¤ò»È¤¦¤³¤È¤Ë¤·¤Þ¤¹¡£
°Ê²¼¤Î¥³¡¼¥É¤òÁ´¤Æ¥³¥Ô¡¼¤·¡¢PowerShell ¤ËޤêÉÕ¤±¤Æ¤¯¤À¤µ¤¤¡£

function ExecuteCounterServiceHosting
{
    # WCFɬ¿Ü¤Î¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê¤ò GAC ¤«¤é¥í¡¼¥É
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.ServiceModel");
    # ¼«ºî¤Î WCF ¥µ¡¼¥Ó¥¹ ¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê¤ò GAC ¤«¤é¥í¡¼¥É
    [void][System.Reflection.Assembly]::LoadWithPartialName("Sample.WCFServices");

    # ¥µ¡¼¥Ó¥¹ ¥¯¥é¥¹¤Î·¿¾ðÊó
    $counterServiceType = [Sample.WCFServices.CounterService];

    # ¥Ù¡¼¥¹ ¥¢¥É¥ì¥¹
    $counterServiceAddress = New-Object "System.Uri" @("net.tcp://localhost:10000/Sample/WCFServices/CounterService.svc");

    # ¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤ÎÀßÄê
    $counterServiceBinding = New-Object "System.ServiceModel.NetTcpBinding" @([System.ServiceModel.SecurityMode]::None);
    $counterServiceBinding.Namespace = "http://schemas.sample.net/WCFServices";

    # ¥³¥ó¥È¥é¥¯¥È¤Î¼èÆÀ
    $counterServiceContractType = [Sample.WCFServices.ICounterService];

    # ¥µ¡¼¥Ó¥¹ ¥Û¥¹¥ÈºîÀ®
    $counterServiceHost = New-Object "System.ServiceModel.ServiceHost" @($counterServiceType, $counterServiceAddress);
    [void]$counterServiceHost.AddServiceEndpoint($counterServiceContractType, $counterServiceBinding, [System.String]::Empty);

    # ¥Û¥¹¥Æ¥£¥ó¥° ³«»Ï
    $counterServiceHost.Open();

    # ÂÔµ¡
    [System.Console]::WriteLine("WCF ¥µ¡¼¥Ó¥¹ ¤Î ¥Û¥¹¥Æ¥£¥ó¥°¤ò³«»Ï¤·¤Þ¤·¤¿¡£");
    foreach($dispatcher in $counterServiceHost.ChannelDispatchers)
    {
        [System.Console]::WriteLine("Listening uri: {0}", $dispatcher.Listener.Uri.ToString());
    }
    [System.Console]::WriteLine("Enter ¥­¡¼¤ò²¡¤¹¤È½ªÎ»¤·¤Þ¤¹¡£");
    [System.Console]::ReadLine();

    # ¥Û¥¹¥Æ¥£¥ó¥° ½ªÎ»
    $counterServiceHost.Close();

    # ¥¨¥é¡¼¥È¥é¥Ã¥×
    trap
    {
        if (($counterServiceHost -ne $()) -and ($counterServiceHost.State -eq [System.ServiceModel.CommunicationState]::Opened))
        {
            $counterServiceHost.Close();
        }
        break;
    }
}



¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤»¤Ð¡¢PowerShell ¾å¤Ç WCF ¥Û¥¹¥Æ¥£¥ó¥°¤¬³«»Ï¤µ¤ì¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¤Ë¤Ï¡¢°Ê²¼¤Î¥³¡¼¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£

ExecuteCounterServiceHosting;


À®¸ù¤¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£

WCF ¥µ¡¼¥Ó¥¹ ¤Î ¥Û¥¹¥Æ¥£¥ó¥°¤ò³«»Ï¤·¤Þ¤·¤¿¡£
Listening uri: net.tcp://localhost:10000/Sample/WCFServices/CounterService.svc
Enter ¥­¡¼¤ò²¡¤¹¤È½ªÎ»¤·¤Þ¤¹¡£

¥Û¥¹¥Æ¥£¥ó¥°¤ò½ªÎ»¤µ¤»¤ë¤Ë¤Ï¡¢Enter ¥­¡¼¤ò²¡¤·¤Þ¤¹¡£ ( ¤Ç¤â¡¢¤Þ¤À²¡¤·¤Á¤ã¤À¤á¡ä¡ã )


[ 3. PowerShell ¤Ç WCF ¥µ¡¼¥Ó¥¹¤Ë¥¢¥¯¥»¥¹ ]
¸½ºß³«¤¤¤Æ¤¤¤ë PowerShell ¤È¤ÏÊ̤ˡ¢¤â¤¦¤Ò¤È¤Ä PowerShell¤òµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤ÎÊÌ PowerShell ¤¬¡¢¥¯¥é¥¤¥¢¥ó¥È¤òôÅö¤·¤Þ¤¹¡£

ConnectToCounterService ¤È¤¤¤¦´Ø¿ô¤òÄêµÁ¤·¡¢¤½¤ÎÃæ¤Ç WCF ¥µ¡¼¥Ó¥¹¤Ø¤Î¥¢¥¯¥»¥¹¤Î°ìÏ¢¤Î½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
°Ê²¼¤Î¥³¡¼¥É¤òÁ´¤Æ¥³¥Ô¡¼¤·¡¢PowerShell ¤ËޤêÉÕ¤±¤Æ¤¯¤À¤µ¤¤¡£

function ConnectToCounterService
{
    # WCFɬ¿Ü¤Î¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.ServiceModel");
    # ¼«ºî¤Î WCF ¥µ¡¼¥Ó¥¹ ¥¯¥é¥¹ ¥é¥¤¥Ö¥é¥ê
    [void][System.Reflection.Assembly]::LoadWithPartialName("Sample.WCFServices");

    # CounterService ¤Î¥Á¥ã¥Í¥ë¤òÀ¸À®
    $contractAssemblyQualifiedName = [Sample.WCFServices.ICounterService].AssemblyQualifiedName;
    $counterServiceBinding = New-Object "System.ServiceModel.NetTcpBinding" @([System.ServiceModel.SecurityMode]::None);
    $counterServiceChannelFactory = New-Object "System.ServiceModel.ChannelFactory``1[[$contractAssemblyQualifiedName]]" @($counterServiceBinding, "net.tcp://localhost:10000/Sample/WCFServices/CounterService.svc");
    $counterServiceProxy = $counterServiceChannelFactory.CreateChannel();;

    # ÁªÂò»èºîÀ®
    $accessMethodChoice = New-Object "System.Management.Automation.Host.ChoiceDescription" @("&Access", "CounterService ¥µ¡¼¥Ó¥¹¤Î Access ¥á¥½¥Ã¥É¤ò¼Â¹Ô");
    $releaseMethodChoice = New-Object "System.Management.Automation.Host.ChoiceDescription" @("&Release", "CounterService ¥µ¡¼¥Ó¥¹¤Î Release ¥á¥½¥Ã¥É¤ò¼Â¹Ô");
    $getCountMethodChoice = New-Object "System.Management.Automation.Host.ChoiceDescription" @("&GetCount", "CounterService ¥µ¡¼¥Ó¥¹¤Î GetCount ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤ÆÌá¤êÃͤòɽ¼¨");
    $exitChoice = New-Object "System.Management.Automation.Host.ChoiceDescription" @("&Exit", "½ªÎ»");
    $methodChoiceDescription = [System.Management.Automation.Host.ChoiceDescription[]]@($accessMethodChoice, $releaseMethodChoice, $getCountMethodChoice, $exitChoice);

    # ¥á¥½¥Ã¥ÉÁªÂò»è¥ë¡¼¥×
    $run = $True;
    while ($run)
    {
        $result = $Host.UI.PromptFOrChoice("[ ½èÍýÁªÂò ]", [System.String]::Empty, $methodChoiceDescription, 0);
        switch ($result)
        {
            0 {$counterServiceProxy.Access();},
            1 {$counterServiceProxy.Release();},
            2 {$counterServiceProxy.GetCount();},
            3 {$run = $False;}
        }
    }

    # ¸å½èÍý
    # ¥×¥í¥­¥· ¥ª¥Ö¥¸¥§¥¯¥È¤ò IClientChannel ¤Ë¥­¥ã¥¹¥È¤·¤Æ Close¤·¤¿¤¤¤ó¤À¤±¤ÉPowerShell ¤Î¥­¥ã¥¹¥È ¥Á¥§¥Ã¥¯¤ËÃÆ¤«¤ì¤ë¡£
    # ChannelFactory ¤Î Close ¥á¥½¥Ã¥É¤¬ÆâÉô¤Ç Close ¤·¤Æ¤¯¤ì¤Æ¤¤¤ë¤«¤é¤Þ¤¡¤¤¤¤¤ó¤À¤±¤É^^;
    #$counterServiceChannel = [System.ServiceModel.IClientChannel]$counterServiceProxy
    #$counterServiceChannel.Close();
    $counterServiceChannelFactory.Close();

    # ¥¨¥é¡¼¥È¥é¥Ã¥×
    trap
    {
        if (($counterServiceChannelFactory -ne $()) -and ($counterServiceChannelFactory.State -eq [System.ServiceModel.CommunicationState]::Opened))
        {
            #if (($counterServiceChannel -ne $()) -and ($counterServiceChannel.State -eq [System.ServiceModel.CommunicationState]::Opened))
            #{
            #    $counterServiceChannel.Close();
            #}
            $counterServiceChannelFactory.Close();
        }
    }
}



¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤»¤Ð¡¢PowerShell ¾å¤Ç CounterService ¥µ¡¼¥Ó¥¹¤Ø¤Î¥¢¥¯¥»¥¹¤¬¹Ô¤¨¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¤Ë¤Ï¡¢°Ê²¼¤Î¥³¡¼¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ ( ¤µ¤Ã¤­ºîÀ®¤·¤¿ ExecuteCounterServiceHosting ´Ø¿ô¤Ï¤Á¤ã¤ó¤È¼Â¹ÔÃæ¤Î¤Þ¤Þ¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹¤è¤Í¡© )

ConnectToCounterService;


À®¸ù¤¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£

[ ½èÍýÁªÂò ]
[A] Access  [R] Release  [G] GetCount  [E] Exit  [?] ¥Ø¥ë¥× (´ûÄêÃÍ¤Ï "A"):

¼Â¹Ô¤·¤¿¤¤½èÍý¤ÎƬʸ»ú¤òÆþÎϤ·¤Æ Enter ¤ò²¡¤»¤Ð¡¢½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£³Æ½èÍý¤ÎÀâÌÀ¤òɽ¼¨¤¹¤ë¤Ë¤Ï¡¢ "?" ¤ÈÆþÎϤ·¤Æ Enter ¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£


[ 4. ´°À® ]
¤³¤ì¤Ç´°À®¤Ç¤¹¡£¥¯¥é¥¤¥¢¥ó¥È¤òÊ£¿ôÍѰդ·¤¿¤ê¤·¤Æ»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


[ 5. ¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë²½ ]
Ëè²ó¥³¥Þ¥ó¥É¤ò¥³¥Ô¥Ú¤¸¤ã¤¢¤Á¤ç¤Ã¤ÈÉÔÊØ¤Ê¤Î¤Ç¡¢¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤È¤·¤ÆÊݸ¤·¤Æ¤ª¤¯ÊýË¡¤òºÇ¸å¤Ë¾Ò²ð¤·¤Æ¤ª¤­¤Þ¤¹¡£
PowerShell ¤Î¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ï "ps1" ¤Ç¤¹¡£
¤¿¤À¡¢PowerShell ¤Î´ûÄê¤ÎÀßÄê¤Ç¤Ï¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô¤¬µö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤È¡¢¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤È¤·¤ÆÊݸ¤µ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô¤¬µö²Ä¤µ¤ì¤ë¤è¤¦¤ËÀßÄ꤬Êѹ¹¤µ¤ì¤Þ¤¹¡£

Set-ExecutionPolicy RemoteSigned


¤³¤Î¤¢¤¿¤ê¤Î¾ÜºÙ¤Ê²òÀâ¤Ï¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Î²òÀâ¤òÆÉ¤ó¤À¾å¤Ç¡¢¾åµ­¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤«¤É¤¦¤«¤òȽÃǤ·¤Æ¤¯¤À¤µ¤¤¡£

get-help about_signing | out-host -paging


¤Ç¡¢¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤Î¼Â¹ÔÊýË¡¤Ç¤¹¤¬¡¢¥Õ¥¡¥¤¥ë̾¤ò ( ɬ¤º¥Ñ¥¹ÉÕ¤­¤Ç ) ÆþÎϤ·¤Æ Enter ¤ò²¡¤¹¤À¤±¤Ç¤¹¡£¤¢¤È¡¢PowerShell ¤Îµ¯Æ°»þ¤Ë¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤È¤·¤Æ¥¹¥¯¥ê¥×¥È ¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Æ¤ä¤Ã¤Æ¤â¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¥¿¥°: .NET C# WCF PowerShell