Задать вопрос
@bRUtality
highload developer

Silverlight + WCF: настройки хостинга?

Приветствую, коллеги!

Прошу совета по настройке IIS для Silverlight-приложения, использующего WCF.

Если проект запустить в Visual Studio для дебага, то все работает. Как вы знаете, VS запускает IIS Express для этих целей. И, если посмотреть, то Silverlight-приложение использует адрес locahost:39408, а WCF — locahost:39429:

4449721.jpg

Теперь нужно опубликовать сайт в локальной сети. На сервере в IIS создаю новый сайт, указываю путь на папку с Silverlight-приложением, привязываю его к свободному порту. Сайт работает, но Silverlight не находит, где теперь располагается веб-сервис. Сообщение об ошибке (из консоли chrome):

POST localhost:39429/Service2.svc

Uncaught Error: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid. Check InnerException for exception details. at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()

at SilverlightApplication1.ServiceReference1.NumberRowAtLinesCompletedEventArgs.get_Result()

at SilverlightApplication1.MainPage.client_NumberRowAtLinesCompleted(Object sender, NumberRowAtLinesCompletedEventArgs e)

at SilverlightApplication1.ServiceReference1.Service2Client.OnNumberRowAtLinesCompleted(Object state)




Очевидная мысль, что wcf-сервис тоже нужно захостить и сильверлайту указать на него путь. Делаю. В Silverlight-приложении в файле ServiceReferences.ClientConfig меняю адрес сервиса с



<configuration>

    <system.serviceModel>

        <bindings>

            <customBinding>

                <binding name="CustomBinding_Service2">

                    <binaryMessageEncoding />

                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

                </binding>

            </customBinding>

        </bindings>

        <client>

            <endpoint address="localhost:39429/Service2.svc" binding="customBinding"

                bindingConfiguration="CustomBinding_Service2" contract="ServiceReference1.Service2"

                name="CustomBinding_Service2" />

        </client>

    </system.serviceModel>

</configuration>


на

<configuration>

    <system.serviceModel>

        <bindings>

            <customBinding>

                <binding name="CustomBinding_Service2">

                    <binaryMessageEncoding />

                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

                </binding>

            </customBinding>

        </bindings>

        <client>

<endpoint address="myserver:8088/Service2.svc" binding="customBinding"

                bindingConfiguration="CustomBinding_Service2" contract="ServiceReference1.Service2"

                name="CustomBinding_Service2" />

        </client>

    </system.serviceModel>

</configuration>


(на всякий случай привожу весь текст конфига).

Но сообщение об ошибке не меняется. Т.е. сильверлайт по-прежнему продолжает стучаться на localhost:39429.



Где исправить этот путь на сервис и только ли в этом дело?

В сети достаточно много мануалов на эту тему, но они достаточно противоречивые. Только больше запутался от их прочтения.



Заранее благодарю всех, кто захочет поучаствовать в дискуссии.
  • Вопрос задан
  • 3716 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@bRUtality Автор вопроса
highload developer
Все, нашел!
На стороне WCF в web.config есть такая запись:
<service name="WcfService1.Service2">
    <endpoint address="myserver:8088/Service2.svc" binding="customBinding" bindingConfiguration="WcfService1.Service2.customBinding0" contract="WcfService1.Service2" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

так вот, в ней полный адрес — лишний!
Подставил пустую строку:
<service name="WcfService1.Service2">
    <endpoint address="" binding="customBinding" bindingConfiguration="WcfService1.Service2.customBinding0" contract="WcfService1.Service2" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

и заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@noonesshadow
xap не закешировался случаем?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы