Какое имя службы используется для служб 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).)