【问题标题】:How to specify WCF operation to call at run time?如何指定要在运行时调用的 WCF 操作?
【发布时间】:2012-01-10 17:32:50
【问题描述】:

我有一个 WCF WF Web 服务(工作流服务 4.0),该服务的每个操作都有相同的签名,但名称不同。

我的系统收到一个事件{int eventType, int entityId},需要将该事件分派给我上面提到的使用配置的网络服务上的一个操作。

例如假设我有配置文件(将 eventType 映射到操作名称):

1 -> "StartOrder"
5 -> "StopOrder"
8 -> "ProcessPaymet"
9 -> "RepartFraud"

所以如果我收到的eventType 等于 5,我需要执行以下操作:

string operationName = eventTypeToOperationMap[eventType];
new ChannelFactory<IMyWebService>().CreateChannel().CallOperation(operationName, entityId);

而 IMyWebService 有一个方法:

void StopOrder(int entityId);

背景:IMyWebService 是一个 Windows 工作流基础 4.0 工作流服务。我希望能够向 Web 服务添加新的入口点,并更改事件调度器的配置文件,而无需重新编译事件调度器。

【问题讨论】:

  • 嗨,THX,您是否可以考虑重构您的服务接口,以便将 int eventType 作为输入参数?然后,您的服务代码可以相应地分支。这将意味着从细粒度的服务接口转向更通用的服务接口。我没有将此作为答案,因为它没有回答您提出的实际问题,但我认为这可能是一种可以让您摆脱困境的替代方法。

标签: wcf workflow-foundation-4 workflowservice


【解决方案1】:

您很可能需要调用以 eventType 作为参数的另一个服务(或您的服务上的另一个操作)。在该操作中,您将创建一个新通道并调用相应的操作(就像您已经在做的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2012-08-06
    • 2010-11-08
    相关资源
    最近更新 更多