방법: 구성에서 서비스 바인딩 지정
이 예제에서 ICalculator 계약이 기본 계산기 서비스에 대해 정의되고, 서비스가 CalculatorService 클래스에 구현된 다음 해당 끝점이 Web.config 파일에 구성됩니다. 여기서 서비스는 BasicHttpBinding을 사용하는 것으로 지정됩니다. 구성 대신에 코드를 사용하여 이 서비스를 구성하는 방법에 대한 설명은 방법: 코드에서 서비스 바인딩 지정을 참조하십시오.
일반적으로 바인딩 및 주소 정보를 코드에서 명령적으로 지정하지 않고 구성에서 선언적으로 지정하는 것이 좋습니다. 일반적으로 배포된 서비스의 바인딩과 주소는 서비스를 배포할 때 사용된 바인딩 및 주소와 다르기 때문에 코드로 끝점을 정의하는 것은 효과적이지 않습니다. 일반적으로 바인딩 및 주소 지정 정보를 코드와 구분하면 응용 프로그램을 다시 컴파일하거나 다시 배포할 필요 없이 해당 정보를 변경할 수 있습니다.
다음 구성 단계는 모두 Configuration Editor 도구(SvcConfigEditor.exe)를 사용하여 수행할 수 있습니다.
이 예제의 소스 복사에 대해서는 BasicBinding을 참조하십시오.
서비스를 구성하는 데 사용할 BasicHttpBinding을 지정하려면
서비스 유형에 대한 서비스 계약을 정의합니다.
<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
[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); }
서비스 클래스에 서비스 계약을 구현합니다.
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
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; } }
참고: 주소 또는 바인딩 정보는 서비스 구현 내에 지정되지 않습니다. 또한 구성 파일에서 해당 정보를 가져오기 위해 코드를 쓰지 않아도 됩니다. Web.config 파일을 만들어 WSHttpBinding을 사용하는
CalculatorService
에 대한 끝점을 구성합니다.<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name=" CalculatorService" > <endpoint <-- Leave the address blank to be populated by default--> <--from the hosting environment,in this case IIS, so --> <-- the address will just be that of the IIS Virtual --> <--Directory.--> address="" <--Specify the binding type --> binding="wsHttpBinding" <--Specify the binding configuration name for that --> <--binding type. This is optional but useful if you --> <--want to modify the properties of the binding. --> <--The bindingConfiguration name Binding1 is defined --> <--below in the bindings element. --> bindingConfiguration="Binding1" contract="ICalculator" /> </service> </services> <bindings> <wsHttpBinding> <binding name="Binding1"> <-- Binding property values can be modified here. --> <--See the next procedure. --> </binding> </wsHttpBinding> </bindings> </system.serviceModel> </configuration>
다음 줄이 포함된 Service.svc 파일을 만든 다음 IIS(인터넷 정보 서비스) 가상 디렉터리에 넣습니다.
<%@ServiceHost language=c# Service="CalculatorService" %>
바인딩 속성의 기본값을 수정하려면
WSHttpBinding의 기본 속성 값 중 하나를 수정하려면 <wsHttpBinding> 요소 내에 새 바인딩 구성 이름
<binding name="Binding1">
을 만들고 이 바인딩 요소에 바인딩 특성에 대한 새 값을 설정합니다. 예를 들어 기본 열기 및 닫기 시간 제한 값을 1분에서 2분으로 변경하려면 구성 파일에 다음을 추가합니다.<wsHttpBinding> <binding name="Binding1" closeTimeout="00:02:00" openTimeout="00:02:00"> </binding> </wsHttpBinding>