Можно ли сделать так, чтобы веб-сайт предоставлял конфигурацию WCF для приложения silverlight? - PullRequest
0 голосов
/ 26 августа 2010

Я занимаюсь разработкой приложения silverlight 4.0, которое связывается со службой WCF.

Конфигурация WCF (конечная точка, ...) содержится в файле ServiceReferences.ClientConfig.

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

Есть ли способ для приложения silverlight получать какую-либо информацию с веб-сервера или получать такие данные от него?

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Хорошо, после долгих поисков в сети я смог закодировать следующее решение, агрегировав различную информацию, которую нашел.

Во-первых, Silverlight 4 (например, SL3) использует другой механизм для создания элемента управления silverlight на веб-странице на клиенте. Он использует тег .

Чтобы передать параметры инициализации в приложение silverlight, вам просто нужно добавить

<param name="initParams" value="key1=value1,key2=value2" />

в файл page.aspx (из веб-проекта) под тегом объекта, и приложение SL получит эти 2 параметра при запуске.

Например, используя страницу aspx по умолчанию, сгенерированную из VS2010:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/MyApp.xap"/>
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50401.0" />
    <param name="autoUpgrade" value="true" />
    <param name="initParams" value="key1=value1,key2=value2" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
    </a>
</object>

Чтобы получить доступ к параметрам в приложении SL, вам просто нужно кодировать следующее в файле App.xaml.cs:

private void Application_Startup(object sender, StartupEventArgs e)
{
    var builder = new StringBuilder ();

    foreach (String key in e.InitParams.Keys)
        builder.AppendFormat ("from InitParams: {0} = {1}", 
                              key, e.InitParams[key]).AppendLine ();

    HtmlPage.Window.Alert (builder.ToString ());

    // Other code...
}

На данный момент это разрешает только статические значения для параметров. Чтобы иметь динамические значения, вам просто нужно изменить строку initParam на:

<param name="initParams" value="<%= string.Format("WCFReferenceURL={0}", ConfigurationManager.AppSettings["WCFReferenceURL"])%>" />

чтобы получить значения из файла конфигурации на веб-сервере. ;)

Надеюсь, это поможет какой-нибудь бедной душе!

0 голосов
/ 26 августа 2010

Вы, конечно, можете переопределить конечную точку.Вы можете указать новую конечную точку при создании объекта servicehost для использования вашей службы ( см. Эту ссылку ).

Очевидно, вам потребуется корневая служба, которая не изменяется.Это обеспечит конечные точки для каждого пользователя (в противном случае конечные точки должны быть пользовательскими настройками, созданными и сохраненными в клиентском приложении).

...