Могут быть и лучшие способы, которыми я могу воспользоваться, но это работает для меня, и это гибко.
В 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