다음을 통해 공유


SendActivity 활동 사용

SendActivity 활동은 WCF(Windows Communication Foundation)를 사용하는 서비스에서 구현되는 계약에 정의된 클라이언트 측 동기 작업 호출을 모델링하는 데 사용됩니다.

서비스 계약에 대한 코드 생성

워크플로에서 SendActivity 활동을 사용하려면 계약 인터페이스와 해당 계약과 연결된 끝점의 클라이언트 측 구성이 필요합니다. 이 작업을 수행하는 한 가지 방법은 Svcutil.exe 명령줄 도구를 사용하는 것입니다. 예를 들어, 서비스가 https://localhost:8888/MyService.svc에 있는 검색 가능한 끝점을 사용하여 실행 중이면 다음 구문을 사용하여 SendActivity 활동에 필요한 코드를 생성할 수 있습니다.

svcutil.exe https://localhost:8888/MyService.svc

Svcutil.exe 도구는 서비스를 사용하는 데 필요한 특정 끝점과 바인딩을 정의하는 응용 프로그램에서 사용할 수 있는 응용 프로그램 구성 파일을 생성합니다. 생성되는 두 번째 파일에는 프록시 클래스와 실제 계약 인터페이스가 포함되어 있습니다. 계약 정의는 서비스 검색을 위해 SendActivity 활동에 필요합니다. SendActivity 활동이 이러한 두 파일의 정보를 사용할 수 있도록 두 파일이 워크플로 프로젝트에 추가되어야 합니다.

계약 인터페이스에 액세스할 수 있는 경우 Svcutil.exe 도구를 사용할 필요 없이 계약 인터페이스를 프로젝트에 직접 추가하여 응용 프로그램 구성 파일에서 적절한 클라이언트 끝점 구성을 추가할 수도 있습니다.

서비스 메서드 호출

SendActivity 활동은 ChannelToken과 작업 정보가 있어야 서비스 계약의 작업에 성공적으로 연결하여 작업을 호출할 수 있습니다.

SendActivity 활동에 대한 ChannelToken 지정

WCF 끝점에는 계약 이름, 계약 바인딩, 보안 정보 및 주소와 관련된 정보가 포함되어 있습니다. 이 정보는 응용 프로그램 구성 파일에 입력되지만 이전 단원에서 설명한 Svcutil.exe 도구를 사용하여 생성될 수 있습니다. 예를 들어, 응용 프로그램 구성 파일에서 https://localhost:8888/MyService.svc 주소에서 수신하는 서비스에 대한 클라이언트 노드는 다음과 같습니다.

<client>
    <endpoint address="https://localhost:8888/MyService.svc"
        binding="customBinding" bindingConfiguration="WSHttpContextBinding_MyServiceContract"
        contract="MyService.localhost.MyServiceContract"
        name="WSHttpContextBinding_MyServiceContract">
        <identity>
            <userPrincipalName value="someone@example.com" />
        </identity>
    </endpoint>
</client>

SendActivity 활동을 만들 때 System.Workflow.Activities.ChannelToken.Name을 설정하여 채널 이름을 지정하고, System.Workflow.Activities.ChannelToken.OwnerActivityName을 설정하여 채널의 범위를 지정하고, ChannelToken 개체의 System.Workflow.Activities.ChannelToken.EndpointName 속성을 설정하여 클라이언트 끝점을 지정하는 방법으로 ChannelToken 개체를 만듭니다. 그런 다음 ChannelToken 속성을 사용하여 ChannelToken 개체를 SendActivity 인스턴스와 연결합니다. 다음 코드에서는 SendActivity 활동과 ChannelToken 개체를 만드는 방법과 앞에서 설명한 응용 프로그램 구성의 정보를 사용하여 ChannelTokenSendActivity 활동과 연결하는 방법을 보여 줍니다.

SendActivity sendActivity1 = new SendActivity();
ChannelToken channel1 = new ChannelToken();
channel1.EndpointName = "WSHttpContextBinding_MyServiceContract";
channel1.Name = "WSHttpContextBinding_MyServiceContract";
channel1.OwnerActivityName = "Workflow1";
this.sendActivity1.ChannelToken = channel1;
this.sendActivity1.Name = "sendActivity1";

SendActivity 활동에 대한 작업 정보 지정

SendActivity 활동은 단일 계약에서 정의된 단일 작업을 호출합니다. 이렇게 하기 위해 SendActivity는 호출할 작업의 이름뿐만 아니라 계약의 데이터 형식에 대한 정보가 포함된 TypedOperationInfo 개체를 사용합니다. TypedOperationInfo 클래스의 ContractType 속성은 계약 인터페이스 형식을 나타내고, TypedOperationInfo 클래스를 통해 액세스되는 Name 속성은 해당 형식에서 호출할 작업의 이름을 나타냅니다.

System.Workflow.Activities.TypedOperationInfo typedoperationinfo1 = new System.Workflow.Activities.TypedOperationInfo();
typedoperationinfo1.ContractType = typeof(MyServiceContractClient.localhost.MyServiceContract);
typedoperationinfo1.Name = "DoWork";
typedoperationinfo1.PrincipalPermissionName = "";
typedoperationinfo1.PrincipalPermissionRole = "";
this.sendActivity1.ServiceOperationInfo = typedoperationinfo1;

참고 항목

작업

작업 2: 워크플로 서비스 클라이언트 만들기

참조

SendActivity
TypedOperationInfo
ServiceOperationInfo
ChannelToken

개념

ReceiveActivity 활동 사용
워크플로 서비스 제작 스타일

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.