Обновите все сервисные ссылки WCF в один клик (два клика тоже будет в порядке!) - PullRequest
4 голосов
/ 05 февраля 2009

У меня есть несколько проектов, содержащих несколько ссылок на сервисы WCF.

Мои службы WCF постоянно меняются, поэтому мне часто приходится обходиться и обновлять все ссылки на мои службы.

Есть ли способ сделать это одним действием?

Ответы [ 3 ]

6 голосов
/ 05 февраля 2009

Ну, вместо того, чтобы использовать IDE, вы можете использовать svcutil в командной строке через скрипт сборки? Тогда все, что вам нужно сделать, это повторно запустить bat / script / что угодно ...

1 голос
/ 06 февраля 2009

Я вообще не использую сгенерированные прокси. У меня просто есть общая сборка между моим клиентом и сервером, которая определяет интерфейсы контрактов на обслуживание + следующая ловкость рук.

    // this class can be used to instantiate a unidirectional proxy (one that doesn't require callbacks from the server)
    public class UniDirectionalServiceProxy<T> : System.ServiceModel.ClientBase<T> where T : class
    {
        public UniDirectionalServiceProxy()
        {
        }

        public UniDirectionalServiceProxy(string endpointConfigurationName) :
            base(endpointConfigurationName)
        {
        }

        public UniDirectionalServiceProxy(string endpointConfigurationName, string remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
        {
        }

        public UniDirectionalServiceProxy(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
        {
        }

        public UniDirectionalServiceProxy(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
            base(binding, remoteAddress)
        {
        }

        // new keyword allows us to supercede the inherited protected member and make it public.
        public new T Channel
        {
            get
            {
                return base.Channel;
            }
        }
    }

Выглядит знакомо, верно? Создайте этот объект, и затем вы просто измените свои звонки, чтобы использовать члена канала.

Вы также можете использовать ChannelFactory, чтобы получить почти такой же результат (я предполагаю, что они сделали Channel защищенным членом ClientBase, чтобы поощрять разработчиков использовать ChannelFactory), но я предпочитаю этот механизм, так как в итоге вы получаете один объект, который инкапсулирует управление связью. и звонки по проводам. Очевидно, что таким образом вы потеряете асинхронные методы из svcutil, но в любом случае это довольно легко сделать самостоятельно с делегатами.

0 голосов
/ 05 февраля 2009

Я предпочитаю избегать установки ссылок на сервисы WCF через механизм IDE, если я могу избежать этого. Я бы предпочел просто предоставить прокси в отдельной библиотеке классов. Таким образом, обычно происходит то, что обновление из репозитория исходного кода нарушит сборку локальной копии, и тогда будет очевидно, что что-то нужно изменить. В конце концов, это должно быть так же больно, как и любое изменение публичного интерфейса. Я не фанат svcutil.exe.

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