Workflow 如何将Windows工作流作为Web服务(.svc)宿主?
我正在尝试将windows工作流作为web服务宿主,下面是我构建并希望作为web服务(.svc)宿主的示例工作流,您能建议所需的步骤吗Workflow 如何将Windows工作流作为Web服务(.svc)宿主?,workflow,workflow-foundation-4,workflow-foundation,window-functions,sharepoint-workflow,Workflow,Workflow Foundation 4,Workflow Foundation,Window Functions,Sharepoint Workflow,我正在尝试将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_L
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;
}
}
最快的方法是创建WCF工作流服务应用程序 您将获得一个工作流设计器,可以在其中拖放所需的活动: 如果您在Visual Studio中运行该项目,您将通过服务操作获得自动生成的WSDL: 它还将提供Visual Studio的WCF测试客户端工具: 您可以使用
Pick Branch
活动创建基于工作流的服务,该服务处理多种方法。然后,每个分支将有一个接收和发送回复
活动,接收活动移动到触发器
部分,发送回复活动移动到操作
部分
每个触发器将用于服务上的特定操作。在下面的示例中,我定义了两个操作:MyFirstOperation
和MySecondOperation
以下是WCF测试客户端工具将显示的内容,其中包含工作流中公开的多个操作:
希望这能让你开始。建立基于工作流的WCF服务的主题可能会涉及到很多方面。:)
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();
}
}
}
}