Как я могу вручную создать клиентский прокси для службы WF4 (xamlX) - PullRequest
1 голос
/ 14 февраля 2012

Я создал несколько сервисов, обернув WorkflowServiceHost в сервис WCF; используя WorkflowHostingEndpoint. Благодаря этому я смог определить свой контракт на обслуживание и создать прокси-классы для подключения к этим сервисам.

Я сейчас создаю службу, в которой я хочу использовать действия по обмену сообщениями WF4 и снова самостоятельно разместить службу. Я также ДЕЙСТВИТЕЛЬНО хочу создать мои прокси-классы без использования ServiceReference в VS2010 или ServiceUtil ...

Я видел некоторые ссылки, в которых используется активность отправки в клиенте службы, но я хотел бы иметь возможность использовать более «похожий на WCF» прокси, созданный непосредственно на основе контракта на обслуживание, как я делал с другим Сервисы. Как я могу это сделать? Где-нибудь в xamlX (или xaml с сообщениями) хранится контракт интерфейса, который я могу использовать для генерации прокси вручную?

ПРИМЕЧАНИЕ. Я не хочу использовать операцию отправки, как описано в WF_WCF_Samples.

UPDATE: Я попытался создать интерфейс, идентичный рабочему процессу получения, прежде чем опубликовать этот вопрос; но я продолжаю получать следующую ошибку:

Сообщение с действием 'http://tempuri.org/ISvrClientService/Create' не может быть обработано в получателе из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть связано либо с контрактом несоответствие (несоответствие действий между отправителем и получателем) или несоответствие привязки / безопасности между отправителем и получателем. Проверьте что отправитель и получатель имеют один и тот же контракт и одинаковую привязку (включая требования безопасности, например, Сообщение, Транспорт, Нет).

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 июня 2012

Я сделал это успешно с фабрикой каналов и созданными вручную интерфейсами. Хитрость заключалась в сопоставлении имен параметров ответа / отправки / выхода, а не просто подписи типа.

Это особенно важно, если в вашем рабочем процессе есть закладки с корреляцией.

1 голос
/ 14 февраля 2012

Нет необходимости использовать действие Отправить.Когда вы размещаете службу рабочего процесса, вы размещаете конечную точку SOAP, единственное отличие - это реализация, но это частная деталь.Вы можете создать прокси-объект с помощью ChannelFactory, как и с любым другим сервисом WCF.

var factory = new ChannelFactory<IYourService>();
var proxy = factory.CreateChannel();

Интерфейс IYourService - это то, что вам нужно сделать вручную.На сервере его нет, это делается в рабочем процессе, поэтому вы должны закодировать идентичный контракт.

...