Приложение Silverlight не может получить доступ к службам WCF на других компьютерах - PullRequest
2 голосов
/ 06 февраля 2010

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

При развертывании на других серверах (dev, test или staging) приложение не может получить доступ к службам WCF.

Это фрагмент моего ServiceReference.ClientConfig выглядит как

<endpoint address="http://localhost:1794/MyWebService.svc"
                binding="customBinding" bindingConfiguration="CustomBinding_MyWebService"
                contract="ConfigMgmtServiceReference.MyWebService"
                name="CustomBinding_MyWebService" />

Моя корневая папка также содержит файл clientaccesspolicy.xml.

Как мне обойти эту проблему?

1 Ответ

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

Я подозреваю, что localhost:1794 будет причиной проблемы - когда приложение silverlight выполняется на клиентском компьютере, localhost не вернет его на сервер.

Метод, который я использую для устранения подобных проблемэто программно установить конечные точки во время выполнения.Две части информации, которые мне нужны, - это местоположение в моем веб-проекте службы (которое известно заранее) и адрес (домен), с которого было предоставлено приложение silverlight (который я могу узнать).

    private void initEndpoint(ServiceEndpoint endPoint, string serviceName)
    {
        Uri hostUri = Application.Current.Host.Source;
        string wcfBaseUri = string.Format("{0}://{1}:{2}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port);

        endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName));
    }

В этом фрагменте кода папка /WebServices находится там, где мои веб-службы расположены в моем веб-приложении.Затем я вызываю эту функцию следующим образом:

        LoggingServiceClient loggingService = new LoggingServiceClient();
        initEndpoint(loggingService.Endpoint, "LoggingService.svc");

Моя фактическая установка немного сложнее, потому что я также хочу иметь возможность переопределить это и вручную настроить конечные точки, но вы получите точку.Благодаря этому я смог развернуть все виды установок, веб-серверы работают на нечетных портах, а бит silverlight-> webservice просто работает каждый раз.

...