State Machine Workflow Service 샘플
이 샘플에서는 상태 시스템 워크플로를 사용하여 워크플로 서비스를 만드는 방법과 상태 시스템 워크플로를 사용하여 계산기를 구현하는 방법을 설명하고 상태가 자동으로 저장되는 장기 실행 프로세스를 보여 줍니다. 워크플로 상태가 유지 관리되므로 워크플로 서비스를 다시 시작할 경우 클라이언트는 워크플로 서비스의 동일한 인스턴스와 통신할 수 있습니다. 또한 이 샘플에서는 서비스에 예기치 않은 작업이 호출될 경우 워크플로에서 예외가 발생하도록 하기 위해 계약에서 응용 프로그램 수준 프로토콜을 적용하는 방법을 보여 줍니다.
참고
이 샘플을 빌드하고 실행하려면 .NET Framework 버전 3.5가 설치되어 있어야 하며 프로젝트 및 솔루션 파일을 열려면 Visual Studio 2008이 필요합니다.
이 샘플 설정에 대한 자세한 내용은 Windows Communication Foundation 샘플의 일회 설치 절차를 참조하십시오.
서비스는 다음 샘플 코드에서와 같이 ICalculator
서비스 계약을 구현합니다.
[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
[OperationContract()]
int PowerOn();
[OperationContract()]
int Add(int value);
[OperationContract()]
int Subtract(int value);
[OperationContract()]
int Multiply(int value);
[OperationContract()]
int Divide(int value);
[OperationContract()]
void PowerOff();
}
각각 이벤트 처리기 집합을 가지는 상태 집합이 샘플에서 구현됩니다. 각 이벤트 처리기는 ICalculator
계약에서 작업을 구현하는 수신 동작을 포함합니다. 해당 상태가 특정 상태로 되어 있으므로 상태 시스템 워크플로는 수신 동작이 해당 상태에서 구현하는 작업 집합을 수락할 수 있습니다. 이는 응용 프로그램 수준 프로토콜을 적용하는 데 도움이 됩니다.
Web.config 파일은 서비스에 대한 바인딩을 정의하고 두 개의 다른 바인딩과 함께 두 개의 끝점을 노출합니다. 이러한 바인딩 중 하나는 쿠키가 사용하도록 설정된 BasicHttpContextBinding이고 다른 하나는 BasicHttpContextBinding을 원하지 않는 클라이언트를 위한 WSHttpContextBinding입니다. WSHttpContextBinding은 요청을 특정 워크플로 인스턴스로 라우트하는 데 사용되는 컨텍스트를 유지 관리할 수 있게 합니다.
IIS(인터넷 정보 서비스)에서 서비스를 설치하려면
Windows Communication Foundation 샘플의 일회 설치 절차에 나열된 설치 지침을 수행합니다.
IIS에서 ServiceModelSamples 가상 디렉터리에 Windows 인증을 사용하도록 설정합니다.
IIS 5.1 또는 6.0에서 Windows 인증을 사용하려면
- 명령 프롬프트 창을 열고 start inetmgr 을 입력하여 IIS(인터넷 정보 서비스) MMC 스냅인을 엽니다.
- 기본 웹 사이트에 있는 가상 루트 ServiceModelSamples를 마우스 오른쪽 단추로 클릭하고 속성을 클릭한 다음 디렉터리 보안 탭을 클릭합니다.
- 인증 및 액세스 제어에서 편집을 클릭합니다.
- 인증 방법 대화 상자에서 Windows 통합 인증을 선택합니다.
IIS 7.0에서 Windows 인증을 사용하려면
- 명령 프롬프트 창을 열고 start inetmgr 을 입력하여 IIS(인터넷 정보 서비스) MMC 스냅인을 엽니다.
- 기본 웹 사이트에서 ServiceModelSamples 가상 루트를 선택합니다.
- ServiceModelSamples 홈 창에서 IIS 그룹에 있는 인증을 두 번 클릭합니다.
- Windows 인증을 선택하고 사용 작업을 선택합니다.
프로젝트를 빌드합니다. 프로젝트에서 ServiceModelSamples를 빌드 및 업데이트합니다.
영속 저장소에 대한 액세스를 허용하려면
- Windows Communication Foundation 샘플의 일회 설치 절차 항목에 있는 CreateStores.cmd 스크립트를 실행합니다. 이 샘플에서는 NetFx35Samples_ServiceWorkflowStore 데이터베이스를 사용합니다.
- ASP.NET 사용자 계정을 SQL Server 사용자 그룹의 멤버로 만듭니다.
서비스를 올바르게 설치하려면 브라우저에서 https://localhost/ServiceModelSamples/service.svc 주소를 가리킵니다. 서비스의 도움말 페이지가 표시됩니다. WSDL(웹 서비스 기술 언어)을 보려면 https://localhost/ServiceModelSamples/service.svc?wsdl을 입력합니다.
이 샘플을 실행하려면 Calculator Client 샘플을 사용해야 합니다. 이 샘플은 WPF(Windows Presentation Foundation)를 사용하여 만든 계산기 사용자 인터페이스로 서비스의 클라이언트 역할을 합니다. 서비스가 제공하는 바인딩에 대응하는 여러 개의 끝점을 사용할 수 있습니다. 바인딩을 변경하려면 EndPoint 메뉴 항목을 클릭하고 BasicHtttpContextBinding 또는 WSHttpContextBinding 중에서 적절한 바인딩을 선택합니다.
서비스의 영속성을 테스트하려면 클라이언트를 닫고 계산기 클라이언트가 실행되는 동안 다시 엽니다. 계산기 클라이언트가 같은 서비스 인스턴스와 다시 통신하며 아래쪽에 인스턴스 ID를 표시합니다. 계산기 클라이언트에서는 처음으로 호출을 수행할 때 Client.ctx라는 텍스트 파일을 사용하여 영속적인 위치에 컨텍스트를 저장합니다(이 경우 샘플의 \bin 디렉터리). 클라이언트를 다시 열면 클라이언트에서 파일이 있는지 여부를 확인합니다. 텍스트 파일이 있는 경우 저장된 컨텍스트를 만드는 채널에 적용합니다. 워크플로 서비스가 완료된 후 \bin 디렉터리에 있는 Client.ctx 파일로 클라이언트를 열면 클라이언트는 컨텍스트를 채널에 적용하려고 합니다. 그러면 통신하려는 워크플로 인스턴스가 없기 때문에 오류가 발생합니다. 파일을 삭제하고 다시 시도합니다.
IIS를 다시 시작하여 워크플로 서비스를 재생할 수도 있습니다. 모든 작업 후에 지속성 저장소를 사용하기 때문에 서비스의 상태가 저장됩니다. 따라서 IIS를 시작한 후에 클라이언트에서 서비스와 통신을 시도하면 워크플로 인프라에서 지속성 저장소의 워크플로 인스턴스를 받고 같은 인스턴스와 통신할 수 있게 됩니다.
참고
IIS를 다시 시작한 후에 처음으로 작업을 호출하면 채널에서 보안 토큰이 만료되어 발생하는 MessageSecurityException 예외를 받게 됩니다. 다른 작업을 호출하면 성공합니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.