Совместное использование сервисных контрактов WCF с Unity - PullRequest
0 голосов
/ 29 марта 2012

Я довольно новичок в WCF, я хочу разделить контракт на обслуживание и контракты на передачу данных между сервисом в одном решении и потребителем сервиса в другом решении.Я создал отдельный проект, который совместно используется обоими решениями, который содержит как контракты на обслуживание, так и контракты на передачу данных.Когда я ссылаюсь на мой сервис, контракты на передачу данных обмениваются, но не контракт на обслуживание.Мой контракт выглядит следующим образом:

[ServiceContract]
public interface IDistributionService
{
    [OperationContract]
    [ServiceKnownType(typeof (Distribution))]
    bool AddDistributions(Distribution[] oDistributions);
}

Когда я смотрю на файл reference.cs, я использую объекты Distribution, но он снова генерирует контракт IDistributionService, вот выдержка из файла reference.cs:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="eDistributorService.IDistributionService")]
public interface IDistributionService {
   [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDistributionService/AddDistributions", ReplyAction="http://tempuri.org/IDistributionService/AddDistributionsResponse")]
    bool AddDistributions(mhcb.syd.eDistribution.WebServices.Contracts.DTO.Distribution[] oDistributions);
    }

Есть ли способ заставить потребителя использовать интерфейс IDistributionService без генерации конкретного экземпляра в файле reference.cs?

Основная причина, которую я хочу знать, заключается в том, чтобыЯ могу использовать внедрение зависимостей (единство).

.RegisterType<IDistributionService, DistributionServiceClient>(
                new Interceptor<InterfaceInterceptor>(),
                new InterceptionBehavior(container.Resolve<IInterceptionBehavior>()))

Еще раз спасибо!

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Сначала убедитесь, что вы указываете справочнику услуг «повторное использование типов».При переходе к «Добавить ссылку на службу ...» нажмите «Дополнительно» и подтвердите, что установлен флажок «Повторное использование типов в ссылочных сборках».

Если этот флажок установлен (что, по моему мнению, является поведением по умолчанию)), тогда вы, возможно, не сможете делать то, что хотите, добавив «ссылку на службу».

Совместное использование контракта является предпочтительным шаблоном WCF (по моему мнению), но реализация, которую я обычно принимаю, заключается виспользуйте класс ChannelFactory для создания клиентского соединения, а не сгенерированный прокси.Сгенерированный прокси в порядке - он быстрый и простой - но он неуклюжий и требует обслуживания.

Просмотрите эту ссылку MSDN на Использование ChannelFactory vs Proxies в WCF для обсуждения и Ссылка CodeProject для примера использования.

0 голосов
/ 29 марта 2012

Код артефактов svcutil производит отстой. Но это, безусловно, самый простой (то есть самый дешевый) способ использования развязки, которую обеспечивает WCF. Повторное использование контрактов и организаций - это тесная связь сервиса и потребителя.

Если вы хотите, чтобы ваш контейнер генерировал прокси на стороне клиента для сервисов WCF, вы можете использовать расширение для Unity , которое делает свое дело. Он также поддерживает функции обнаружения WCF4.

...