ASPNetCompatibility 샘플은 WCF(Windows Communication Foundation)에서 ASP.NET 호환성 모드를 사용하도록 설정하는 방법을 보여 줍니다. ASP.NET 호환성 모드에서 실행되는 서비스는 ASP.NET 애플리케이션 파이프라인에 완전히 참여하며 파일/URL 권한 부여, 세션 상태 및 클래스와 HttpContext 같은 ASP.NET 기능을 사용할 수 있습니다. 이 HttpContext 클래스를 사용하면 쿠키, 세션 및 기타 ASP.NET 기능에 액세스할 수 있습니다. 이 모드에서는 바인딩이 HTTP 전송을 사용하고 서비스 자체가 IIS에서 호스트되어야 합니다.
이 샘플에서 클라이언트는 콘솔 애플리케이션(실행 파일)이며 서비스는 IIS(인터넷 정보 서비스)에서 호스트됩니다.
비고
이 샘플에 대한 설정 절차 및 빌드 지침은 이 항목의 끝에 있습니다.
이 샘플을 실행하려면 .NET Framework 4 애플리케이션 풀이 필요합니다. 새 애플리케이션 풀을 만들거나 기본 애플리케이션 풀을 수정하려면 다음 단계를 수행합니다.
제어판을 엽니다. 시스템 및 보안 제목 아래에서 관리 도구 애플릿을 엽니다. IIS(인터넷 정보 서비스) 관리자 애플릿을 엽니다.
연결 창에서 트리 뷰 를 확장합니다 . 애플리케이션 풀 노드를 선택합니다.
.NET Framework 4를 사용하도록 기본 애플리케이션 풀을 설정하려면(기존 사이트에 비호환성 문제가 발생할 수 있음) DefaultAppPool 목록 항목을 마우스 오른쪽 단추로 클릭하고 기본 설정을 선택합니다. .Net Framework 버전 풀다운을 .Net Framework v4.0.30128 이상으로 설정합니다.
.NET Framework 4를 사용하는 새 애플리케이션 풀을 만들려면(다른 애플리케이션에 대한 호환성을 유지하기 위해) 애플리케이션 풀 노드를 마우스 오른쪽 단추로 클릭하고 애플리케이션 풀 추가를 선택합니다. 새 애플리케이션 풀의 이름을 지정하고 .Net Framework 버전 풀다운을 .Net Framework v4.0.30128 이상으로 설정합니다. 아래 설정 단계를 실행한 후 ServiceModelSamples 애플리케이션을 마우스 오른쪽 단추로 클릭하고 애플리케이션 관리, 고급 설정...을 선택합니다. 애플리케이션 풀을 새 애플리케이션 풀로 설정합니다.
이 샘플은 계산기 서비스를 구현하는 시작 서비스를 기반으로 합니다.
ICalculator
계약은 연산 집합을 수행하는 동안 실행 중인 결과를 유지할 수 있도록 ICalculatorSession
계약으로 수정되었습니다.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculatorSession
{
[OperationContract]
void Clear();
[OperationContract]
void AddTo(double n);
[OperationContract]
void SubtractFrom(double n);
[OperationContract]
void MultiplyBy(double n);
[OperationContract]
void DivideBy(double n);
[OperationContract]
double Result();
}
서비스는 계산을 수행하기 위해 여러 서비스 작업이 호출되기 때문에 각 클라이언트에 대해 기능을 사용하여 상태를 유지 관리합니다. 클라이언트는 호출하여 현재 결과를 검색할 수 있으며 호출 Result
하여 Clear
결과를 0으로 지울 수 있습니다.
서비스는 ASP.NET 세션을 사용하여 각 클라이언트 세션에 대한 결과를 저장합니다. 이를 통해 각 클라이언트의 실행 결과를 서비스에 여러 번 호출하면서도 지속적으로 유지할 수 있습니다.
비고
ASP.NET 세션 상태 및 WCF 세션은 매우 다릅니다. WCF 세션에 대한 자세한 내용은 세션을 참조하세요.
서비스는 ASP.NET 세션 상태에 대한 긴밀한 종속성을 가지며 ASP.NET 호환성 모드가 올바르게 작동해야 합니다. 이러한 요구 사항은 특성을 적용하여 AspNetCompatibilityRequirements
선언적으로 표현됩니다.
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{
double Result
{ // store result in AspNet Session
get {
if (HttpContext.Current.Session["Result"] != null)
return (double)HttpContext.Current.Session["Result"];
return 0.0D;
}
set
{
HttpContext.Current.Session["Result"] = value;
}
}
public void Clear()
{
Result = 0.0D;
}
public void AddTo(double n)
{
Result += n;
}
public void SubtractFrom(double n)
{
Result -= n;
}
public void MultiplyBy(double n)
{
Result *= n;
}
public void DivideBy(double n)
{
Result /= n;
}
public double Result()
{
return Result;
}
}
샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 클라이언트 창에서 Enter 키를 눌러 클라이언트를 종료합니다.
0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.
샘플을 설정, 빌드 및 실행하려면
Windows Communication Foundation 샘플에 대한One-Time 설치 프로시저를 수행했는지 확인합니다.
솔루션의 C# 또는 Visual Basic .NET 버전을 빌드하려면 Windows Communication Foundation 샘플빌드의 지침을 따릅니다.
솔루션이 빌드된 후 Setup.bat 실행하여 IIS 7.0에서 ServiceModelSamples 애플리케이션을 설정합니다. 이제 ServiceModelSamples 디렉터리가 IIS 7.0 애플리케이션으로 표시됩니다.
단일 컴퓨터 또는 컴퓨터 간 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.