如何在silverlight中动态设置wcf服务的服务器名称

时间:2010-08-04 20:40:24

标签: silverlight channelfactory

我需要部署一个Silverlight 4解决方案,它消耗来自WCF服务的数据。挑战是这将是一个生产安装,因此我无法控制服务的服务器名称,银灯应用程序将不会安装在与WCF相同的服务器上。

从这里开始,这是我迄今为止所提出的:

我必须通过initParams将teh WCF的服务器名称传递给我的silverligth应用程序。

我在aspx文件中

<param name="initparams" value="servicepoint=http://myservice" />

然后在app.xaml.cs中 我称之为参数:

private void Application_Startup(object sender, StartupEventArgs e)
    {
        this.RootVisual = new MainPage(e.InitParams); //pass parameter from html direclty to main page

    }

我在app启动时调用了这个,因此参数将在整个应用程序的范围内。

现在在主页面中我将此参数分配给变量

dswconnection = initParams["servicepoint"];

然后每当我查询服务时,我都会设置地址来覆盖服务中的默认值.defernece.config文件

QueryClient selAct = new QueryClient("BasicHttpBinding_IQuery");
            selAct.Endpoint.Address = new System.ServiceModel.EndpointAddress(dswconnection);

我的问题是......这是最好的方法,还是有另一种方法可以在您不知道服务器名称是什么时动态识别服务的服务器名称。这个关键点我不能使用某些功能来检测channelfactory中的主机名或地址,因为silverlight应用程序将驻留在与WCF不同的主机上。

现在传递给initparams的值存储在一个配置文件中,该配置文件由javascript读取,然后作为值分配。在我的代码中,为了简洁起见,我对其进行了硬编码。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

经过一些更多的研究后,它会出现在sl应用程序要安装在不同服务器上的情况下,或者如果需要将它指向不同的WCF端点,则上述方法最适合此项目。我们最终在带有其他连接字符串的web.config文件中存储了endpoin的完整限定服务器名称。然后使用JSON将此值传递给init params。 Silverlight然后能够初始化以获取新服务器名称并将SL应用程序指向新服务。

答案 1 :(得分:0)

我所做的是用zip打开xap文件,然后手动更新端点servicereference.clientconfig文件,然后压缩回来。