방법: 코드에서 서비스 엔드포인트 만들기
이 예제에서는 계산기 서비스에 대해 ICalculator
계약을 정의하고, CalculatorService
클래스에서 서비스를 구현한 다음 코드로 엔드포인트를 정의합니다. 이 때 서비스가 BasicHttpBinding 클래스를 사용하도록 지정합니다.
일반적으로 바인딩 및 주소 정보를 코드에서 명령적으로 지정하지 않고 구성에서 선언적으로 지정하는 것이 좋습니다. 배포된 서비스의 바인딩과 주소는 일반적으로 서비스를 개발할 때 사용되는 바인딩 및 주소와는 다르기 때문에 코드에서 엔드포인트를 정의하는 방식은 대개 실용적이지 않습니다. 일반적으로 바인딩 및 주소 지정 정보를 코드와 구분하면 애플리케이션을 다시 컴파일하거나 다시 배포할 필요 없이 해당 정보를 변경할 수 있습니다.
코드에서 서비스 엔드포인트를 만들려면
서비스 계약을 정의하는 인터페이스를 만듭니다.
[ServiceContract] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); }
<ServiceContract()> _ Public Interface ICalculator <OperationContract()> _ Function Add(ByVal n1 As Double, _ ByVal n2 As Double) As Double <OperationContract()> _ Function Subtract(ByVal n1 As Double, ByVal _ n2 As Double) As Double <OperationContract()> _ Function Multiply(ByVal n1 As Double, _ ByVal n2 As Double) As Double <OperationContract()> _ Function Divide(ByVal n1 As Double, _ ByVal n2 As Double) As Double End Interface
1단계에서 정의한 서비스 계약을 구현합니다.
public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } }
Public Class CalculatorService Implements ICalculator Public Function Add(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Add Return n1 + n2 End Function Public Function Subtract(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Subtract Return n1 - n2 End Function Public Function Multiply(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Multiply Return n1 * n2 End Function Public Function Divide(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Divide Return n1 / n2 End Function End Class
호스팅 애플리케이션에서 서비스에 사용할 바인딩 및 서비스에 대한 기본 주소를 만듭니다.
// Specify a base address for the service String baseAddress = "http://localhost/CalculatorService"; // Create the binding to be used by the service. BasicHttpBinding binding1 = new BasicHttpBinding();
' Specify a base address for the service Dim baseAddress = "http://localhost/CalculatorService" ' Create the binding to be used by the service. Dim binding1 As New BasicHttpBinding()
호스트를 만들고, 호스트에 대한 서비스 엔드포인트를 추가할 ServiceHost.AddServiceEndpoint(Type, Binding, String) 또는 다른 오버로드 중 하나를 호출합니다.
using(ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.AddServiceEndpoint(typeof(ICalculator),binding1, baseAddress);
Using host As New ServiceHost(GetType(CalculatorService)) With host .AddServiceEndpoint(GetType(ICalculator), _ binding1, _ baseAddress)
코드에서 바인딩을 지정하되 런타임에서 제공하는 기본 엔드포인트를 사용하려면 ServiceHost를 만들 때 기준 주소를 생성자로 전달하고 ServiceHost.AddServiceEndpoint를 호출하지 마세요.
ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri(baseAddress));
Dim host As New ServiceHost(GetType(CalculatorService), New Uri(baseAddress))
기본 엔드포인트에 대한 자세한 내용은 단순화된 구성 및 WCF 서비스의 단순화된 구성을 참조하세요.