加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何将Windows Workflow作为Web服务(.svc)托管?

发布时间:2020-12-13 21:27:01 所属栏目:Windows 来源:网络整理
导读:我正在尝试将 Windows工作流程作为Web服务托管,下面是我构建的示例工作流程,并希望作为Web服务(.svc)托管,是否可以建议所需的步骤? using System;using System.ServiceModel.Activities;using System.Activities;using System.ServiceModel;using System.Ac
我正在尝试将 Windows工作流程作为Web服务托管,下面是我构建的示例工作流程,并希望作为Web服务(.svc)托管,是否可以建议所需的步骤?
using System;
using System.ServiceModel.Activities;
using System.Activities;
using System.ServiceModel;
using System.Activities.Statements;

namespace DemoWF
{
    public class _25_LeaveRequest
    {
        public WorkflowService GetInstance()
        {
            WorkflowService service;
            Variable<int> empID = new Variable<int> { Name = "empID" };
            Variable<int> requestID = new Variable<int> { Name = "requestID" };

        Receive receiveLeaveRequest = new Receive
        {
            ServiceContractName = "ILeaveRequestService",OperationName = "ApplyLeave",CanCreateInstance = true,Content = new ReceiveParametersContent
            {
                Parameters ={
                    {"empID",new OutArgument<int>(empID)}
                }
            }
        };

        SendReply replyLeaveRequestID = new SendReply
        {
            Request = receiveLeaveRequest,Content = new SendParametersContent
            {
                Parameters ={
                            {"requestID",new InArgument<int>(requestID)},},};


        Sequence workflow = new Sequence()
        {
            Variables = { empID,requestID },Activities = {
                new WriteLine{Text="WF service is starting..."},receiveLeaveRequest,new WriteLine{
                    Text=new InArgument<string>(aec=> "Emp ID="+empID.Get(aec).ToString())
                },new Assign<int>{
                    Value=new InArgument<int>(5),To=new OutArgument<int>(requestID)
                },new WriteLine{
                    Text=new InArgument<string>(aec=> "Request ID="+requestID.Get(aec).ToString())
                },replyLeaveRequestID
            },};

        service = new WorkflowService
        {
            Name = "AddService",Body = workflow
        };
        return service;
    }
}

现在,它是自我托管的,如下所示

namespace DemoWF
{
    class Program
    {
        static void Main(string[] args)
        {
            LeaveRequest();
        }

        private static void LeaveRequest()
        {
            _25_LeaveRequest receiveAndReplyWorkflow = new _25_LeaveRequest();
            WorkflowService wfService = receiveAndReplyWorkflow.GetInstance();
            Uri address = new Uri("http://localhost:8000/WFServices");
            WorkflowServiceHost host = new WorkflowServiceHost(wfService,address);

            try
            {
                Console.WriteLine("Opening Service...");
                host.Open();

                Console.WriteLine("WF service is listening on " + address.ToString() + ",press any key to close");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine("some thing bad happened" + e.StackTrace);
            }
            finally
            {
                host.Close();
            }
        }
    }
}
最快的方法是创建WCF工作流服务应用程序.

您将获得一个工作流设计器,您可以在其中拖放所需的活动:

如果您在Visual Studio中运行该项目,您将获得一个自动生成的WSDL与您的服务操作:

它还将调出Visual Studio的WCF测试客户端工具:

您可以使用“Pick Branch”活动创建一个基于工作流的服务来处理多种方法.然后,每个分支将具有“接收和发送回复”活动,其中接收活动移动到触发部分,并且动作部分中的发送回复活动.

每个触发器都用于服务的特定操作.在下面的示例中,我定义了两个操作:MyFirstOperation和MySecondOperation.

以下是WCF测试客户端工具将显示的工作流程中显示的多个操作:

希望这能让你开始.站起来基于工作流程的WCF服务的主题可以非常复杂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读