Silverlight: Как установить ServiceReferences. ClientConfig при размещении внутри xap

В корне рабочей папки копии сделайте

svn export --force .
14
задан 25 August 2009 в 08:39
поделиться

3 ответа

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

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

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

2
ответ дан 1 December 2019 в 13:21
поделиться

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

В вашем веб-приложении 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
8
ответ дан 1 December 2019 в 13:21
поделиться

Отлично, с этими предложениями мне удалось добиться динамического изменения данных 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 каждый раз, когда я развертываю для тестирования / производства. Отлично, я давно это искал.

7
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

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