2010-05-18 3 views
0

У меня проблема с версиями с контрактом на обслуживание WCF, в котором одна из многих конечных точек, вызываемых для операции, пропускает один из методов из договора.Могу ли я узнать, какие методы WCF поддерживаются на конечной точке перед вызовом?

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

Я пробовал:

foreach (var od in proxy.Endpoint.Contract.Operations) 
    { 
    if (od.Name == "MyMethodName") 
    { 
     hasMethod = true; 
     break; 
    } 
    } 

К сожалению, это использует контракт от вызывающего приложения и фактически не описывает реализацию на самой конечной точке. В результате он возвращает true, даже если конечная точка не выполнила команду.

ответ

2

Вы никогда не узнаете, пока не попробуете. То, что у вас есть, является прокси-сервером реализованного контракта, но то, что на стороне сервера, могло измениться с момента создания/создания.

Предполагая, что это реализация http/httpws, я полагаю, вы могли бы позвонить и проверить справочную службу и загрузить файл wsdl. Это скажет вам, какие методы и т. Д. Поддерживаются. Проблема, с которой вам придется столкнуться, состоит в том, что, хотя имя метода может быть одинаковым, вам также нужно будет проверить тип и параметры возврата, чтобы действительно быть уверенным, что это тот же метод и вы можете вызвать его с помощью прокси, который у вас есть.

Вот ссылка на управление версиями в WCF:
http://msdn.microsoft.com/en-us/library/ms731060.aspx

Вот ссылка на управление версиями лучших практик для WCF:
Best practices for versioning your services with WCF?

+0

Спасибо. К сожалению, мы здесь в каком-то обратном сценарии. Клиентам был предоставлен интерфейс и попросили реализовать его с помощью сервиса. Мы, как хост, вызываем их (это одна конечная точка), и поэтому у нас нет возможности реализовать управление версиями для новых методов, поскольку в этом случае они являются сервером, а не нами. Кроме того, я думаю, что мы создавали наши сервисы для обслуживания Mex только для создания начальных прокси через svcutil. Мы не подталкиваем конфигурации Mex к производству. – devlord