학습
모듈
C# 콘솔 애플리케이션에서 예외 만들기 및 throw - Training
이 모듈에서는 C# 콘솔 애플리케이션에서 사용자 지정 예외를 만들고 throw하며, catch하는 프로세스를 살펴봅니다. 실습 활동은 예외 속성을 사용자 지정하고 예외를 throw하며, 예외 속성을 사용하여 catch 블록 내에서 예외를 완화하는 환경을 제공합니다.
관리 코드에서 오류 조건이 발생하면 예외가 throw됩니다. 그러나 WCF(Windows Communication Foundation) 애플리케이션에서는 서비스 계약에 SOAP 오류를 선언하여 서비스 계약이 클라이언트에 반환되는 오류 정보를 지정합니다. 예외와 오류 간의 관계에 대한 개요는 계약 및 서비스에서 오류 지정 및 처리를 참조하세요.
작업을 하나 이상 포함하는 서비스 계약을 만듭니다. 예제는 방법: 서비스 계약 정의를 참조하세요.
클라이언트가 알림을 받을 수 있는 오류 조건을 지정할 수 있는 작업을 선택합니다. 어떤 오류 조건이 클라이언트에 SOAP 오류를 반환해야 하는지 결정하려면 계약 및 서비스에서 오류 지정 및 처리를 참조하세요.
선택한 작업에 System.ServiceModel.FaultContractAttribute를 적용하고 serialize할 수 있는 오류 형식을 생성자에 전달합니다. serialize 가능 gudtlr 생성 및 사용에 대한 자세한 내용은 서비스 계약에서 데이터 전송 지정을 참조하세요. 다음 예제에서는 SampleMethod
작업으로 인해 GreetingFault
가 발생하도록 지정하는 방법을 보여 줍니다.
[OperationContract]
[FaultContractAttribute(
typeof(GreetingFault),
Action="http://www.contoso.com/GreetingFault",
ProtectionLevel=ProtectionLevel.EncryptAndSign
)]
string SampleMethod(string msg);
<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="http://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
Function SampleMethod(ByVal msg As String) As String
오류 조건을 클라이언트에 전달하는 계약의 모든 작업에 대해 2단계와 3단계를 반복합니다.
앞의 절차와 같이 특정 SOAP 오류를 반환하여 오류 조건을 호출 애플리케이션에 전달할 수 있도록 작업에서 지정하고 나면 다음 단계로 해당 사양을 구현합니다.
FaultContractAttribute에 지정된 오류 조건이 작업에서 발생하면 지정한 SOAP 오류가 형식 매개 변수인 새 System.ServiceModel.FaultException<TDetail>을 throw합니다. 다음 예제에서는 앞의 절차와 다음 코드 섹션에 표시된 GreetingFault
에서 SampleMethod
를 throw하는 방법을 보여 줍니다.
throw new FaultException<GreetingFault>(new GreetingFault("A Greeting error occurred. You said: " + msg));
Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg))
End If
다음 코드 예제에서는 GreetingFault
작업에 대해 SampleMethod
를 지정하는 단일 작업 구현을 보여 줍니다.
using System;
using System.Collections.Generic;
using System.Net.Security;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(Namespace="http://microsoft.wcf.documentation")]
public interface ISampleService{
[OperationContract]
[FaultContractAttribute(
typeof(GreetingFault),
Action="http://www.contoso.com/GreetingFault",
ProtectionLevel=ProtectionLevel.EncryptAndSign
)]
string SampleMethod(string msg);
}
[DataContractAttribute]
public class GreetingFault
{
private string report;
public GreetingFault(string message)
{
this.report = message;
}
[DataMemberAttribute]
public string Message
{
get { return this.report; }
set { this.report = value; }
}
}
class SampleService : ISampleService
{
#region ISampleService Members
public string SampleMethod(string msg)
{
Console.WriteLine("Client said: " + msg);
// Generate intermittent error behavior.
Random rnd = new Random(DateTime.Now.Millisecond);
int test = rnd.Next(5);
if (test % 2 != 0)
return "The service greets you: " + msg;
else
throw new FaultException<GreetingFault>(new GreetingFault("A Greeting error occurred. You said: " + msg));
}
#endregion
}
}
Imports System.Collections.Generic
Imports System.Net.Security
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.Text
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation")> _
Public Interface ISampleService
<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="http://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
Function SampleMethod(ByVal msg As String) As String
End Interface
<DataContractAttribute> _
Public Class GreetingFault
Private report As String
Public Sub New(ByVal message As String)
Me.report = message
End Sub
<DataMemberAttribute> _
Public Property Message() As String
Get
Return Me.report
End Get
Set(ByVal value As String)
Me.report = value
End Set
End Property
End Class
Friend Class SampleService
Implements ISampleService
#Region "ISampleService Members"
Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
Console.WriteLine("Client said: " & msg)
' Generate intermittent error behavior.
Dim rand As New Random(DateTime.Now.Millisecond)
Dim test As Integer = rand.Next(5)
If test Mod 2 <> 0 Then
Return "The service greets you: " & msg
Else
Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg))
End If
End Function
#End Region
End Class
End Namespace
학습
모듈
C# 콘솔 애플리케이션에서 예외 만들기 및 throw - Training
이 모듈에서는 C# 콘솔 애플리케이션에서 사용자 지정 예외를 만들고 throw하며, catch하는 프로세스를 살펴봅니다. 실습 활동은 예외 속성을 사용자 지정하고 예외를 throw하며, 예외 속성을 사용하여 catch 블록 내에서 예외를 완화하는 환경을 제공합니다.
설명서
자세한 정보: 오류 정의 및 지정
자세한 정보: 오류 계약