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