用于Workflow WCF服务(XAMLX)的服务名称

时间:2011-03-29 13:32:44

标签: wcf web-config workflow-foundation-4 endpoint workflowservice

我试图弄清楚如何为我创建的WF服务(MyFoo.xamlx)提供端点等。通常,当您创建服务时,您需要使用服务名称=“”来反映您创建的服务类型?即填写这样的内容:

<Service name="MyNameSpace.Foo" behaviorConfiguration="myFooBehaviorConfig">

这适用于典型的.svc场景,我可以正常工作。只有将这个概念映射到.xamlx服务?如果我有 Foo.xamlx 将其放入服务名称中不起作用 - 或者似乎不起作用(因为没有启用元数据)。

如果我然后从服务中删除 behaviorConfiguration 属性,并从<behavior/>标记中删除 myFooBehaviorConfig - 它基本上为web配置带来了更多的全局设置 - 热潮!我可以看到.xamlx暴露的方法/操作?

<serviceBehaviors> <behavior name="foo" > VS <serviceBehaviors> <behavior >

首先,这很好,不需要任何工作,但同时我不希望开发人员访问HTTP端点或netpipe。我只希望他们通过我指定的 net.tcp 端口进入。为了做到这一点,我需要以某种方式将<Service name=""/>与xamlx匹配?

我也尝试过使用创建一个空的.svc文件然后以那种方式指向xamlx的技巧(这样开发人员总是假定它的.svc而不是.xamlx)

<%@ ServiceHost Language="C#" Debug="true" Service="ActivityHubService.xamlx" Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory" %>

同样,如果我删除命名行为等,这也可以通过foo.svc ..但我似乎无法破解整个匹配<service>与freakin xamlx !! :)呵呵。

令人沮丧..

这个领域的专家是谁?

2 个答案:

答案 0 :(得分:5)

我要把这个给GuerreroTook,因为虽然他给出的答案部分在同一区域,然而它确实引发了一个“是啊也许那么简单......”的思考......

解决方案是:


    <services>

  <service name="ActivityHubService" behaviorConfiguration="foo">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTCPStreamedBinding" contract="IService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://synapse.hub.security:669/SynapseHubSecurity/ActivityHubService" />
      </baseAddresses>
    </host>
  </service>
</services>

然后在一个名为PingService.svc的服务中,我把它放在:

<%@ ServiceHost Language="C#" Debug="true" Service="ActivityHubService.xamlx" Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory" %>

这似乎已经成功了! :)

不知道为什么,但我发誓我这样做了3x而且失败了......但是......我也需要睡觉..

希望这会有助于其他人同样陷入困境。

答案 1 :(得分:2)

根据您的要求,我了解您需要将WF工作流公开为WCF服务,并且您希望客户端通过WCF基础结构直接调用WF,是吗?

您面临的问题是您需要提供班级的完整限定名称,以便工厂找到并激活您的WF工作流程。如果您在VisualStudio中有一个典型的WP项目,那么完全限定名称就是项目的名称+类名,请尝试使用它。

当您构建工作流xaml文件时,编译将生成一个包含类和代码和逻辑的类,并遵循xaml(WPF和Silverlight)编译器的相同行为,类的名称将与文件的名称相同(.xamlx)