Как проверить, что сгенерированный WCF-клиент совместим со службой во время выполнения - PullRequest
2 голосов
/ 07 июня 2010

Я понимаю, что WCF и сервисы в целом предназначены для слабой связи.

Но у меня есть требование, чтобы мое клиентское приложение могло проверять, содержит ли данная конечная точка WCF службу, соответствующую сгенерированному клиентскому коду. Другими словами, мне нужно проверить совместимый сервис.

Очевидно, у меня может быть метод, который возвращает номер версии, поддерживаемый вручную, но я бы предпочел не писать свою собственную систему метаданных, если WCF может что-то делать из коробки.

Ответы [ 3 ]

2 голосов
/ 07 июня 2010

Если это работает по HTTP и включает метаданные службы и HTTP get для метаданных службы, вы можете получить WSDL для службы из

http://yourserver/yourservice/servicefile.svc?wsdl

адрес, а затем проанализируйте этот WSDL и сравните его с вашим прокси-кодом на стороне клиента. Довольно грязно и долго наматывается.

Однако, если http get метаданных службы отключен, вы не сможете больше получать WSDL :-( Пока метаданные службы все еще включены, вы можете проверить классы WCF и извлечь метаданные непосредственно конечная точка обслуживания - но это становится действительно очень опасно .....

Итак, вернемся к вашей идее: почему номер версии недостаточно хорош? Это может быть самый простой способ ... WCF на самом деле не имеет ничего "легкого", как MyClient.CheckCompatibility(); или что-нибудь еще ...

1 голос
/ 07 июня 2010

Это будет зависеть от того, как вы определяете «совместимый».

Может быть, достаточно простого номера версии? Возможно, потребуется более сложная схема номеров версий major.minor.revision. В любом случае клиенту вручную сообщают, какая версия службы ему нужна, и он может вызвать метод GetVersion для службы, чтобы проверить, доступна ли эта версия.

0 голосов
/ 08 июня 2010

Я подумал о другом способе сделать это:

Совместное использование определения интерфейса службы между клиентом и сервером, а затем использование ChannelFactory для создания клиента во время выполнения.

http://msdn.microsoft.com/en-us/library/ms734681.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...