Silverlight: как настроить ServiceReferences.ClientConfig при размещении внутри xap - PullRequest
14 голосов
/ 25 августа 2009

Я использую сервис wcf со своим приложением silverlight. Расположение службы wcf указывается в файле ServiceReferences.ClientConfig, и его необходимо изменить на местоположение, где установлено приложение.

Однако этот файл включен в файл xap и не может быть легко изменен при развертывании приложения. Есть ли другой способ сделать ссылку на службу wcf из приложения silverlight? Или как изменить ServiceReferences.ClientConfig в файле xap?

Ответы [ 4 ]

8 голосов
/ 02 сентября 2009

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

В Web.config вашего веб-приложения добавьте переменную в AppSettings и сохраните базовый URL-адрес. Обратите внимание, что я не сохраняю местоположение файла SVC, я добавлю это позже. Это потому, что у меня есть несколько SVC, на которые я обычно указываю. Вы можете сделать это по-другому.

 <appSettings>
    <add key="ServiceURI" value="http://localhost:64457/"/>
 </appSettings>

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

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight," type="application/x-silverlight-2"
        width="100%" height="100%" ID="Xaml1" >
        <param name="InitParams" value="ServiceURI=<%= ConfigurationManager.AppSettings("ServiceURI") %>" />

В файле Silverlight App.xaml.vb загрузите все InitParms в ресурс или куда угодно

    Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) Handles Me.Startup
    If e.InitParams IsNot Nothing Then
        For Each k As Generic.KeyValuePair(Of String, String) In e.InitParams
            Me.Resources.Add(k.Key, k.Value)
        Next
    End If

Тогда в любом из моих файлов XAML я могу инициализировать службу с настроенным URI, у меня есть метод, подобный этому

Private Sub InitializeService()
    Dim uri As String = App.Current.Resources("ServiceURI")
    If uri Is Nothing OrElse uri = String.Empty Then
        'if there is no value added in the web.config, I can fallback to default values
        _client = New ServiceClient
    Else
        'Notice I hardcoded the location of the SVC files in the client and append there here, you may choose not to do this
        Dim uri_withservice As String = uri & "svc/secure/Service.svc"
        _client = New ServiceClient("CustomBinding_Service", New EndpointAddress(uri_withservice))
    End If
End Sub
7 голосов
/ 29 июня 2010

Отлично, благодаря этим предложениям мне удалось получить данные WCF ServiceReferences.ClientConfig, которые будут динамически изменены при запуске приложения, с URI службы, прочитанным из web.config. Это возможно с помощью «преобразований web.config» в VS2010.

Вот пример web.config.debug, показывающий, как заменяется ServiceURI, когда я выбираю «опубликовать» для своего веб-сайта.

<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
     <...>
  </connectionStrings>

  <appSettings>
    <add key="ServiceURI" value="http://my.location.com/myService.svc"
         xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
  </appSettings>
</configuration>

В моем базовом файле web.config у меня есть тот же ключ / значение, указывающий на локальный сервис. Не нужно помнить, чтобы менять ServiceURI каждый раз, когда я развертываю для тестирования / производства. Отлично, я долго искал это.

2 голосов
/ 08 мая 2012

Представленные здесь решения практически нецелесообразны в том смысле, что вы модифицируете свое приложение для адаптации к настройкам конфигурации. Эта запись в блоге прибита.

2 голосов
/ 25 августа 2009

Нашел решение в этом блоге.

http://www.andybeaulieu.com/Default.aspx?tabid=67&EntryID=132

Здесь конечная точка службы wcf вычисляется из местоположения приложения silverlight

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