2016-01-19 8 views
0

У меня есть несколько проектов в моем решении, которые потребляют то же самое WCF-сервис. Таким образом, каждый из них имеет служебную ссылку на службу WCF. Все хорошо.Используйте ту же ссылку сервиса WCF в нескольких проектах

Когда эти службы объединены в решение, они, естественно, получают сервисную модель из app.config exe. Здесь все становится интересным. Несмотря на то, обе ссылки службы указывают на ту же службу WCF, похоже, мне нужно, чтобы выставить две конечные точки:

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="SecureHttpBindingEndpoint"> 
     <security mode="Transport" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address=".../LocalAuthentication.svc" binding="basicHttpBinding" bindingConfiguration="SecureHttpBindingEndpoint" contract="Webservice1.ILocalAuthentication" name="SecureHttpBindingEndpoint" /> 
    <endpoint address=".../LocalAuthentication.svc" binding="basicHttpBinding" bindingConfiguration="SecureHttpBindingEndpoint" contract="WebService2.ILocalAuthentication" name="SecureHttpBindingEndpoint" /> 
</client> 

Единственное различие между конечными точками является договором - в связи с тем, что ссылки на службы были добавлены с разными именами.

Мой вопрос: Возможно ли иметь только одну конечную точку, которую используют обе службы?

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

+0

Для большей ясности у меня нет контроля над всеми решениями, использующими проекты. –

+0

Для каждого приложения, использующего службу WCF, требуется 1 конечная точка. – Agalo

+1

Упомяните ABC WCF - Адрес, Переплет, Контракт. Для каждого контракта требуется отдельная конечная точка. Даже если контракты одинаковы, они рассматриваются как разные, потому что полное имя отличается. – Tim

ответ

0

Приведенные комментарии, и в частности разъяснение @Tim объясняют, почему мои два проекта не могут использовать одну и ту же конечную точку. Если кто-то еще сталкивается с этой проблемой и действительно нуждается в ее устранении, существует, по-видимому, два потенциальных подхода:

  1. Создайте проект Wrapper, фактически содержащий ссылку на обслуживание, и используйте оба других проекта.
  2. Переименуйте ссылки на службы в проектах так, чтобы они имели одинаковое пространство имен. При определении ссылки на службу вы можете указать «пространство имен», которое используется как квалифицированное имя в конечной точке. Если оба проекта имеют одинаковое пространство имен, то они могут использовать одну и ту же конечную точку.

Обратите внимание, что я использую '', так как «пространство имен», определенное таким образом, не является полным пространством имен служебной ссылки, а скорее добавляется к пространству имен проекта, добавлен. Это означает, что конфликтов пространства имен не будет, если несколько проектов имеют ссылку на службу с тем же «пространством имен».

В моем случае я не смог принять подход 1., но после некоторого размышления (и общения с другими владельцами кода) я смог принять подход 2, просто удалив и воссоздав одну из ссылок на службы. Конечно, я мог бы просто оставить его, имея две конечные точки для одного и того же веб-сервиса в конфиге, это не конец света, но он просто не казался опрятным.

Смежные вопросы