共用方式為


使用 ReceiveActivity 活動

ReceiveActivity 活動是針對在工作流程內實作服務合約作業而設計的。 假定有一個服務合約,ReceiveActivity 活動將一直等待,直到用戶端連線至服務然後執行其包含的子活動為止。

ReceiveActivity 活動能夠實作已使用 Windows Communication Foundation (WCF) (合約優先) 定義的服務合約作業,或者可使用 Windows Workflow Foundation 類別 (工作流程優先) 來建置服務合約。 如需不同工作流程服務撰寫樣式的詳細資訊,請參閱工作流程服務撰寫樣式

使用 ReceiveActivity 活動實作服務合約

當排程 ReceiveActivity 活動執行時,該活動會在服務端點上接聽來自用戶端的傳入連線。 ReceiveActivity 活動只會實作在服務合約上定義的單一作業。 該作業是使用 TypedOperationInfo 物件與 ReceiveActivity 活動產生關聯的。 TypedOperationInfo 類別包含 ContractType 的相關資訊和作業名稱,以及用戶端要成功執行作業所需的身分識別資訊。 下列範例顯示如何建立 ReceiveActivity 活動並與 TypedOperationInfo 物件產生關聯,以實作服務合約中定義的作業。 服務合約與前一節顯示的合約相同。

this.doWorkReceiveActivity = new ReceiveActivity();
TypedOperationInfo doWorkOperationInfo = new TypedOperationInfo();

this.doWorkReceiveActivity.CanCreateInstance = true;
this.doWorkReceiveActivity.Name = "doWorkReceiveActivity";
doWorkOperationInfo.ContractType = typeof(Microsoft.WorkflowServices.Samples.IContractFirstService);
doWorkOperationInfo.Name = "DoWork";
doWorkOperationInfo.PrincipalPermissionRole = "";
this.doWorkReceiveActivity.ServiceOperationInfo = doWorkOperationInfo;

作業可支援任何數量的參數和傳回值。 為了能夠這樣的支援,ReceiveActivity 活動會透過其 ParameterBindings 屬性使用 Windows Workflow Foundation 的參數繫結機制。 下列範例示範如何使用參數繫結將工作流程類別屬性,與前述合約所示的作業傳回值產生關聯。 在這個範例中,會使用工作流程服務類別實作中定義的 ReturnValue 字串屬性建立 ActivityBind 物件。 接著建立 WorkflowParameterBinding,並使用 SetBinding 方法將它與 ActivityBind 物件產生關聯。 最後,透過將參數繫結新增至 ParameterBindings 集合,將參數繫結與 ReceiveActivity 活動產生關聯。

ActivityBind activitybind1 = new ActivityBind();

activitybind1.Name = "ContractFirstServiceWorkflow";
activitybind1.Path = "ReturnValue";
WorkflowParameterBinding returnValueBinding = new WorkflowParameterBinding();
returnValueBinding.ParameterName = "(ReturnValue)";
returnValueBinding.SetBinding(WorkflowParameterBinding.ValueProperty, ((ActivityBind)(activitybind1)));
this.doWorkReceiveActivity.ParameterBindings.Add(returnValueBinding);

建立服務繫結和端點

對於與工作流程服務連線的用戶端而言,必須使用位址、繫結和合約類型資訊來設定端點。 這可以使用應用程式組態檔來完成。 除了端點資訊外,也可以使用服務展現的特定行為。 對於本主題中使用的合約,下列顯示的 App.config 檔可讓用戶端連線至服務以交換資訊,並下載服務本身的合約資訊。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.WorkflowServices.Samples.ContractFirstServiceWorkflow" behaviorConfiguration="ServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8888/ContractFirstService.svc" />
          </baseAddresses>
        </host>
        <endpoint address ="" binding="wsHttpContextBinding" contract="Microsoft.WorkflowServices.Samples.IContractFirstService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <windowsAuthentication
                allowAnonymousLogons="false"
                includeWindowsGroups="true" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

有一些可使用 ReceiveActivity 活動的特定進階案例。 如需詳細資訊,請參閱與工作流程服務交談

請參閱

參考

ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings

概念

工作流程服務撰寫樣式

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.