Какое имя службы используется для служб Workflow WCF (XAMLX)

Я пытаюсь выяснить, как предоставить конечные точки и т. Д. Для службы WF, которую я создал (MyFoo.xamlx). Как правило, когда вы создаете сервис, вам нужно, чтобы имя сервиса ="" отражало тип сервиса, который вы создали? т.е. заполнив что-то вроде этого:

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

Это работает в типичном сценарии.svc, и я могу получить это работает нормально. Только как можно сопоставить эту концепцию с сервисом.xamlx? В том случае, если у меня есть Foo.xamlx, поместив это внутри имени Сервиса, не работает - или, кажется, не работает (так как метаданные не включены).

Если я затем удаляю атрибут поведения Configuration из Сервиса, а также удаляю myFooBehaviorConfig из <behavior/> тэг - в том смысле, что он по существу принимает более глобальные настройки для веб-конфигурации - бум! Я могу увидеть.xamlx выставленные методы / операции?

<serviceBehaviors> <behavior name="foo" > против <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> с чертовски xamlx!!:) хе-хе.

Срыв..

Кто-нибудь эксперт в этой области?

2 ответа

Решение

Я отдам это ГеррероТуку, потому что, хотя ответ, который он дал, был частично в той же области права, он, тем не менее, вызвал момент "да, может быть, это так просто..." мышления..

Решение было таким:


    <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" %>

Это, казалось, сделало трюк!!:)

Не уверен, почему, но я поклялся, что сделал это как 3 раза, и это не удалось.. но... я тоже нуждаюсь в сне..

Надеюсь, это поможет другим в том же джеме вниз по дорожке.

Исходя из того, что вы спрашиваете, я понимаю, что вам нужно представить WF Workflow в качестве службы WCF, и вы хотите, чтобы клиент вызывал напрямую WF через инфраструктуру WCF, верно?

Проблема, с которой вы сталкиваетесь, заключается в том, что вам нужно предоставить полное имя класса, чтобы фабрика могла найти и активировать ваш рабочий процесс WF. Если у вас есть типичный проект WP внутри VisualStudio, полное имя - это имя проекта + имя класса, попробуйте это.

Когда вы создаете свой xaml-файл рабочего процесса, компиляция сгенерирует класс, содержащий и код, и логику, и, следуя тому же поведению компилятора xaml (WPF и Silverlight), имя класса будет таким же, как и у файла (.xamlx).)

Другие вопросы по тегам