äŗˆęœŸć•ć‚Œć‚‹ä¾‹å¤–

ExpectedExceptions ć‚µćƒ³ćƒ—ćƒ«ćÆć€åž‹ęŒ‡å®šć•ć‚ŒćŸć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚’ä½æē”Øć™ć‚‹ćØćć«äŗˆęœŸć•ć‚Œć‚‹ä¾‹å¤–ć‚’ć‚­ćƒ£ćƒƒćƒć™ć‚‹ę–¹ę³•ć‚’ē¤ŗć—ć¦ć„ć¾ć™ć€‚ ć“ć®ć‚µćƒ³ćƒ—ćƒ«ćÆć€é›»å“ć‚µćƒ¼ćƒ“ć‚¹ć‚’å®Ÿč£…ć™ć‚‹ ä½œę„­ć®é–‹å§‹ ć«åŸŗć„ć„ć¦ć„ć¾ć™ć€‚ ć“ć®ć‚µćƒ³ćƒ—ćƒ«ć§ćÆć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćÆć‚³ćƒ³ć‚½ćƒ¼ćƒ« ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ (.exe) ć§ć‚ć‚Šć€ć‚µćƒ¼ćƒ“ć‚¹ćÆć‚¤ćƒ³ć‚æćƒ¼ćƒćƒƒćƒˆ ć‚¤ćƒ³ćƒ•ć‚©ćƒ”ćƒ¼ć‚·ćƒ§ćƒ³ ć‚µćƒ¼ćƒ“ć‚¹ (IIS) ć«ć‚ˆć£ć¦ćƒ›ć‚¹ćƒˆć•ć‚Œć¦ć„ć¾ć™ć€‚

注

ć“ć®ć‚µćƒ³ćƒ—ćƒ«ć®ć‚»ćƒƒćƒˆć‚¢ćƒƒćƒ—ę‰‹é †ćØćƒ“ćƒ«ćƒ‰ę‰‹é †ćÆć€ć“ć®ćƒˆćƒ”ćƒƒć‚Æć®ęœ€å¾Œć«ć‚ć‚Šć¾ć™ć€‚

ć“ć®ć‚µćƒ³ćƒ—ćƒ«ć§ćÆć€ę­£ć—ć„ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć§å‡¦ē†ć™ć‚‹åæ…č¦ćŒć‚ć‚‹ 2 ć¤ć®äŗˆęœŸć•ć‚Œć‚‹ä¾‹å¤–ć®ēØ®é”ž ( TimeoutException と CommunicationException) ć‚’ć‚­ćƒ£ćƒƒćƒć—ć¦å‡¦ē†ć™ć‚‹ę–¹ę³•ć‚’ē¤ŗć—ć¾ć™ć€‚

Windows Communication Foundation (WCF) ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć®é€šäæ”ćƒ”ć‚½ćƒƒćƒ‰ć‹ć‚‰ć‚¹ćƒ­ćƒ¼ć•ć‚Œć‚‹ä¾‹å¤–ć«ćÆć€äŗˆęœŸć•ć‚Œć‚‹ć‚‚ć®ćØć€äŗˆęœŸć—ćŖć„ć‚‚ć®ćŒć‚ć‚Šć¾ć™ć€‚ äŗˆęœŸć—ćŖć„ä¾‹å¤–ć«ćÆć€ OutOfMemoryException ćŖć©ć®č‡“å‘½ēš„ćŖć‚Øćƒ©ćƒ¼ć‚„ć€ ArgumentNullException 悄 InvalidOperationExceptionćŖć©ć®ćƒ—ćƒ­ć‚°ćƒ©ćƒŸćƒ³ć‚° ć‚Øćƒ©ćƒ¼ćŒå«ć¾ć‚Œć¾ć™ć€‚ é€šåøøć€äŗˆęœŸć—ćŖć„ć‚Øćƒ©ćƒ¼ć‚’å‡¦ē†ć™ć‚‹ä¾æåˆ©ćŖę–¹ę³•ćÆćŖć„ćŸć‚ć€é€šåøøćÆ WCF ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆé€šäæ”ćƒ”ć‚½ćƒƒćƒ‰ć‚’å‘¼ć³å‡ŗć™ćØćć«ć‚­ćƒ£ćƒƒćƒć—ćŖć„ć§ćć ć•ć„ć€‚

WCF ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆäøŠć®é€šäæ”ćƒ”ć‚½ćƒƒćƒ‰ć‹ć‚‰ć®äŗˆęœŸć•ć‚Œć‚‹ä¾‹å¤–ć«ćÆć€ TimeoutException态 CommunicationExceptionć€ćŠć‚ˆć³ CommunicationExceptionć®ę“¾ē”Ÿć‚Æćƒ©ć‚¹ćŒå«ć¾ć‚Œć¾ć™ć€‚ ć“ć‚Œć‚‰ćÆć€WCF ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚’äø­ę­¢ć—ć€é€šäæ”ć‚Øćƒ©ćƒ¼ć‚’å ±å‘Šć™ć‚‹ć“ćØć§å®‰å…Øć«å‡¦ē†ć§ćć‚‹é€šäæ”äø­ć®å•é”Œć‚’ē¤ŗć—ć¾ć™ć€‚ å¤–éƒØč¦å› ćÆć€ä»»ę„ć®ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć§ć“ć‚Œć‚‰ć®ć‚Øćƒ©ćƒ¼ć‚’å¼•ćčµ·ć“ć™åÆčƒ½ę€§ćŒć‚ć‚‹ćŸć‚ć€ę­£ć—ć„ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćÆć“ć‚Œć‚‰ć®ä¾‹å¤–ć‚’ć‚­ćƒ£ćƒƒćƒć—ć€ē™ŗē”Ÿć—ćŸćØćć«å›žå¾©ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚

CommunicationException ć®ę“¾ē”Ÿć‚Æćƒ©ć‚¹ć«ćÆć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćŒć‚¹ćƒ­ćƒ¼ć§ćć‚‹ć‚‚ć®ćŒć„ćć¤ć‹ć‚ć‚Šć¾ć™ć€‚ å “åˆć«ć‚ˆć£ć¦ćÆć€ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćÆć“ć‚Œć‚‰ć®äø€éƒØć‚’ć‚­ćƒ£ćƒƒćƒć—ć¦ē‰¹åˆ„ćŖå‡¦ē†ć‚’č”Œć„ć¾ć™ćŒć€ä»–ć®ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćÆ CommunicationExceptionćØć—ć¦å‡¦ē†ć§ćć¾ć™ć€‚ ć“ć‚Œć‚’å®Ÿē¾ć™ć‚‹ć«ćÆć€ć¾ćšć‚ˆć‚Šå…·ä½“ēš„ćŖä¾‹å¤–ć®ēØ®é”žć‚’ć‚­ćƒ£ćƒƒćƒć—ć¦ć‹ć‚‰ć€å¾Œć® catch å„ć§ CommunicationException ć‚’ć‚­ćƒ£ćƒƒćƒć—ć¾ć™ć€‚

ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆé€šäæ”ćƒ”ć‚½ćƒƒćƒ‰ć‚’å‘¼ć³å‡ŗć™ć‚³ćƒ¼ćƒ‰ćÆć€ TimeoutException と CommunicationExceptionć‚’ć‚­ćƒ£ćƒƒćƒć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ ć“ć®ć‚ˆć†ćŖć‚Øćƒ©ćƒ¼ć‚’å‡¦ē†ć™ć‚‹ę–¹ę³•ć® 1 ć¤ćÆć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚’äø­ę­¢ć—ć€é€šäæ”ć‚Øćƒ©ćƒ¼ć‚’å ±å‘Šć™ć‚‹ć“ćØć§ć™ć€‚

try
{
    ...
    double result = client.Add(value1, value2);
    ...
    client.Close();
}
catch (TimeoutException exception)
{
    Console.WriteLine("Got {0}", exception.GetType());
    client.Abort();
}
catch (CommunicationException exception)
{
    Console.WriteLine("Got {0}", exception.GetType());
    client.Abort();
}

äŗˆęœŸć•ć‚Œć‚‹ä¾‹å¤–ćŒē™ŗē”Ÿć—ćŸå “åˆć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćÆå¾Œć§ä½æē”Øć§ćć‚‹å “åˆćØä½æē”Øć§ććŖć„å “åˆćŒć‚ć‚Šć¾ć™ć€‚ ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćŒć¾ć ä½æē”Øć§ćć‚‹ć‹ć©ć†ć‹ć‚’åˆ¤ę–­ć™ć‚‹ć«ćÆć€ State ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ćŒ CommunicationStateć•ć‚Œć¦ć„ć‚‹ć“ćØć‚’ē¢ŗčŖć—ć¾ć™ć€‚é–‹ć‘ćŸć€‚ ć¾ć é–‹ć„ć¦ć„ć‚‹å “åˆćÆć€å¼•ćē¶šćä½æē”Øć§ćć¾ć™ć€‚ ćć‚Œä»„å¤–ć®å “åˆćÆć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚’äø­ę­¢ć—ć€ćć®ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćøć®ć™ć¹ć¦ć®å‚ē…§ć‚’č§£ę”¾ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚

ę³Øę„äŗ‹é …

å¤šćć®å “åˆć€ć‚»ćƒƒć‚·ćƒ§ćƒ³ć‚’ęŒć¤ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćÆä¾‹å¤–ć®å¾Œć«ä½æē”Øć§ććŖććŖć‚Šć€ć‚»ćƒƒć‚·ćƒ§ćƒ³ć‚’ęŒćŸćŖć„ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćÆä¾‹å¤–ć®å¾Œć‚‚å¼•ćē¶šćä½æē”Øć§ćć¾ć™ć€‚ ćŸć ć—ć€ć©ć”ć‚‰ć‚‚äæčØ¼ć•ć‚ŒćŖć„ćŸć‚ć€ä¾‹å¤–ć®å¾Œć«ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć®ä½æē”Øć‚’ē¶šč”Œć™ć‚‹å “åˆćÆć€ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć§ State ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć‚’ē¢ŗčŖć—ć¦ć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćŒć¾ć é–‹ć‹ć‚Œć¦ć„ć‚‹ć‹ć©ć†ć‹ć‚’ē¢ŗčŖć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚

ć‚µćƒ³ćƒ—ćƒ«ć‚’å®Ÿč”Œć™ć‚‹ćØć€ę“ä½œć®åæœē­”ćØä¾‹å¤–ćŒć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆ ć‚³ćƒ³ć‚½ćƒ¼ćƒ« ć‚¦ć‚£ćƒ³ćƒ‰ć‚¦ć«č”Øē¤ŗć•ć‚Œć¾ć™ć€‚

ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆ ćƒ—ćƒ­ć‚»ć‚¹ćÆ 2 ć¤ć®ć‚·ćƒŠćƒŖć‚Ŗć‚’å®Ÿč”Œć—ć€ćć‚Œćžć‚ŒćŒ Add ć‚’å‘¼ć³å‡ŗć—ć€ćć®å¾Œć« Divide ć‚’å‘¼ć³å‡ŗćć†ćØć—ć¾ć™ć€‚ ęœ€åˆć®ć‚·ćƒŠćƒŖć‚Ŗć§ćÆć€ Divideć®å‘¼ć³å‡ŗć—ć‚’č”Œć†å‰ć«ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚’äø­ę­¢ć™ć‚‹ć“ćØć§ć€ćƒćƒƒćƒˆćƒÆćƒ¼ć‚Æć®å•é”Œć‚’ć‚·ćƒŸćƒ„ćƒ¬ćƒ¼ćƒˆć—ć¾ć™ć€‚ 2 ē•Ŗē›®ć®ć‚·ćƒŠćƒŖć‚Ŗć§ćÆć€ć‚æć‚¤ćƒ ć‚¢ć‚¦ćƒˆćŒēŸ­ć™ćŽć¦ćƒ”ć‚½ćƒƒćƒ‰ćŒå®Œäŗ†ć—ćŖććŖć‚‹ćŸć‚ć€ć‚æć‚¤ćƒ ć‚¢ć‚¦ćƒˆę”ä»¶ćŒē™ŗē”Ÿć—ć¾ć™ć€‚ ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆ ćƒ—ćƒ­ć‚»ć‚¹ć‹ć‚‰ć®äŗˆęƒ³ć•ć‚Œć‚‹å‡ŗåŠ›ćÆę¬”ć®ćØćŠć‚Šć§ć™ć€‚

Add(100,15.99) = 115.99
Simulated network problem occurs...
Got System.ServiceModel.CommunicationObjectAbortedException
Add(100,15.99) = 115.99
Set timeout too short for method to complete...
Got System.TimeoutException

ć‚µćƒ³ćƒ—ćƒ«ć‚’čØ­å®šć€ćƒ“ćƒ«ćƒ‰ć€å®Ÿč”Œć™ć‚‹ć«ćÆ

  1. Windows Communication Foundation ć‚µćƒ³ćƒ—ćƒ« 恮One-Time ć‚»ćƒƒćƒˆć‚¢ćƒƒćƒ—ę‰‹é †ć‚’å®Ÿč”Œć—ć¦ć„ć‚‹ć“ćØć‚’ē¢ŗčŖć—ć¾ć™ć€‚

  2. ć‚½ćƒŖćƒ„ćƒ¼ć‚·ćƒ§ćƒ³ć® C# または Visual Basic .NET ć‚Øćƒ‡ć‚£ć‚·ćƒ§ćƒ³ć‚’ćƒ“ćƒ«ćƒ‰ć™ć‚‹ć«ćÆć€ć€ŒWindows Communication Foundation ć‚µćƒ³ćƒ—ćƒ«ć®ćƒ“ćƒ«ćƒ‰ć€ć®ę‰‹é †ć«å¾“ć„ć¾ć™ć€‚

  3. å˜äø€ć¾ćŸćÆč¤‡ę•°ć®ć‚³ćƒ³ćƒ”ćƒ„ćƒ¼ć‚æćƒ¼é–“ć®ę§‹ęˆć§ć‚µćƒ³ćƒ—ćƒ«ć‚’å®Ÿč”Œć™ć‚‹ć«ćÆć€ć€ŒWindows Communication Foundation Samplesć®å®Ÿč”Œć€ć®ę‰‹é †ć«å¾“ć„ć¾ć™ć€‚