Ответ 1
Мэтт, вы, безусловно, можете сделать "двухэтапный" процесс создания прокси-сервера на стороне клиента - это действительно не biggie.
В своем клиентском приложении укажите ссылку MySharedInterfaces
. Затем создайте экземпляр ChannelFactory<T>
для вашего служебного интерфейса:
ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>();
В основном это создает класс factory, который затем способен создавать фактические каналы связи между вашим клиентом и вашим сервером. Поскольку для этого требуется контракт на обслуживание, этот метод работает только в том случае, если вы можете совместно использовать сборку сервисного контракта (который вы можете и хотите в своем случае).
Это довольно затратный и ресурсосберегающий шаг, поэтому, если это вообще возможно, попробуйте где-то запереть factory и повторно использовать его, а не постоянно его воссоздавать.
Учитывая ваш канал factory, вы можете создавать свои реальные каналы связи, что в основном эквивалентно вашему прокси-клиенту, который генерируется с помощью Add Service Reference
:
IMyService client = factory.CreateChannel();
Это не очень дорогостоящая операция, поэтому вы можете делать это каждый раз перед вызовом службы, а не беспокоиться о неисправных каналах и т.д.
client
также реализует интерфейс ICommunicationObject
, поэтому, если вам нужно проверить что-то связанное с WCF, например состояние канала, вы можете направить своего клиента:
CommunicationState currentState = ((ICommunicationObject)client).State;
Таким образом, у вас на самом деле есть все кусочки вашего сгенерированного прокси-класса клиента, но у вас больше контроля над тем, что вы делаете.