Какое имя службы используется для служб Workflow WCF (XAMLX) - PullRequest
1 голос
/ 29 марта 2011

Я пытаюсь выяснить, как предоставить конечные точки и т. Д. Для службы 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 ]

5 голосов
/ 29 марта 2011

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

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


    <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 раза, и это не удалось .. но ... я тоже нуждаюсь в сне ..

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

2 голосов
/ 29 марта 2011

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

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

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

...