Silverlight игнорирует путь WCF из файла web.config - PullRequest
0 голосов
/ 23 октября 2009

Я пишу приложение Silverlight, которое вызывает службу WCF.

Другое решение содержит следующие проекты для Silverlight:
- Веб-проект для размещения приложения silverlight
- Проект приложения Silverlight
- Проект библиотеки классов Silverlight со ссылкой на сервис WCF

Когда я запускаю приложение Silverlight на моем locahost, Silverlight вызывает WCF с использованием localhost и работает нормально.

Затем я опубликовал сервис и веб-приложение и развернул его на другом сервере. Файл web.config был изменен, чтобы указывать на развернутый адрес конечной точки.

Теперь при запуске приложения Silverlight выполняется поиск локального URL-адреса службы, даже если конечная точка в web.config является точкой развернутого сервера.

Откуда приложение silverlight ищет URL-адрес svc? Кажется, он не читает его из файла web.config. Но, похоже, URL-адрес был встроен в сборку во время процесса сборки / публикации.

Есть мысли ??

Спасибо за чтение!

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

Приложение silverlight НЕ просматривает web.config хост-сервера - он находится на стороне сервера и не виден приложению silverlight, работающему на клиенте. Приложение Silverlight просматривает свой собственный файл ServiceReferences.clientconfig или URL-адрес, который указывается программно при создании локального прокси-сервера службы в коде.

Итак, у вас есть 2 варианта:
1. Измените ServiceReferences.clientconfig перед созданием развертываемой версии приложения Silverlight.
2. Используйте код для создания ваших конечных точек на стороне клиента с URL.

Мы используем второй вариант, потому что нам нравится иметь стандартный программный интерфейс, который настраивает наши конечные точки. Мы делаем что-то вроде этого (но не с MaxValue, если это общедоступная служба, конечно):


        public ImportServiceClient CreateImportServiceClient()
        {
            return new ImportServiceClient(GetBinding(), GetServiceEndpoint("ImportService.svc"));
        }

        public ExportServiceClient CreateExportServiceClient()
        {
            return new ExportServiceClient(GetBinding(), GetServiceEndpoint("ExportService.svc"));
        }

        protected override System.ServiceModel.Channels.Binding GetBinding()
        {
            BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
            binding.MaxBufferSize = int.MaxValue;
            binding.MaxReceivedMessageSize = int.MaxValue;
            binding.SendTimeout = TimeSpan.MaxValue;
            binding.ReceiveTimeout = TimeSpan.MaxValue;
            return binding;
        }

        protected EndpointAddress GetServiceEndpoint(string serviceName)
        {
            if (Settings == null)
            {
                throw new Exception("Service settings not set");
            }
            return
                new EndpointAddress(ConcatenateUri(Settings.ServiceUri,serviceName));
        }

        protected EndpointAddress GetServiceEndpoint(string serviceName, Uri address)
        {
            if (Settings == null)
            {
                throw new Exception("Service settings not set");
            }
            return new EndpointAddress(ConcatenateUri(address, serviceName));
        }

Такие классы, как «ImportServiceClient» и «ExportServiceClient» являются сгенерированными прокси-серверами при создании ссылок на службы для наших служб WCF. Параметр Settings.ServiceUri - это место, где мы храним адрес сервера, с которым мы должны разговаривать (в нашем случае он задается динамически через параметры плагина silverlight на странице, на которой он размещен, но вы можете использовать любую схему, которой хотите управлять) этот адрес).

Но если вы предпочитаете просто настроить ServiceReferences.ClientConfig, тогда вам не нужен такой код.

1 голос
/ 19 октября 2010

Я использую InitParams объекта silverlight на странице asp, на котором размещается silverlight, для передачи URL-адреса службы WCF. Вы можете получить URL-адрес из web.config на странице asp. Это работает в моем случае.

...