Мы находимся в процессе переноса устаревших .Net Remoting services на WCF. Прочитав эту тему какое-то время, я наткнулся на этот разговор с метаданными и динамически создавал прокси на клиенте: он казался многообещающим.
То, что я хотел достичь, по возможности, заключается в том, чтобы разоблачить службы в одном веб-приложении с минимальной конфигурацией (то есть без явного <services>
node в файле конфигурации) и построить прокси-серверы в клиенте (по разделение интерфейса) также с минимальной конфигурацией.
Я знаю, что по умолчанию можно предоставлять метаданные для всех служб, но способ, по-видимому, работает, бесполезен, поскольку он генерирует разные URL-адреса для каждой службы, и тогда мне нужно будет поддерживать десятки жестко закодированных строк на моем клиенте.
Это мой текущий файл конфигурации:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Я хотел иметь единственный URL-адрес на сервере (возможно, сам базовый адрес, 'http://localhost/VirtualDir
') и использовать эту конечную точку для автоматического разрешения любого интерфейса службы с клиента. Я встретил этот несколько старый пост, который более или менее то, что я хотел бы достичь. В то время, казалось, не было никакого способа сделать это изящно.
Не существует способа, чтобы, возможно, разоблачить одну конечную точку MEX на сервере, а затем разрешить любой контрактный интерфейс? Таким образом я мог бы:
- сохранить один URL-адрес клиента
- получить конечную точку, используя класс
MetadataResolver
для данного интерфейса - создайте прокси-сервер, используя
ChannelFactory<T>
с помощью разрешенной конечной точки
Я хотел сделать это внутри какого-то класса factory и использовать его с контейнером Unity IoC.
Я думаю, что я все еще могу использовать эту работу, используя какое-то соглашение для создания множества реальных адресов конечных точек с использованием известного формата. Я хотел бы избежать этого, поскольку, поскольку он все еще может привести к проблемам.