从app.config文件中预览客户端应用程序中的合同

时间:2011-12-20 10:27:55

标签: .net wcf app-config

我有一个问题:如何在客户端应用程序中使用“foreach”服务的命名空间?

所以,我的服务中有web.config文件。 客户端部分:

<client>
      <endpoint address="http://nail:81/raj/Service1.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
        name="BasicHttpBinding_IService1" />
      <endpoint address="http://www.xxx.ru:81/upd/Service1.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService11"
        contract="ServiceReference2.IService1" name="BasicHttpBinding_IService11" />
    </client>

在我的客户端应用中,我使用它:

updater.ServiceReference1.Service1Client myclient = new updater.ServiceReference1.Service1Client();

问题:将来,我将在web.config中提供超过50个引用(在我的服务上)。 而且我不想写这样的50个代码行。

非常感谢!

3 个答案:

答案 0 :(得分:2)

回答你的一条评论(当然还有你的问题):

  

我有一个客户端应用程序和50台拥有50项服务的计算机。所有   这些服务正在连接到我的电脑。如果我想全部使用   其中,我必须创建50个客户端对象。但我想用一些东西   像'foreach'一样用于创建客户端的对象并使用它们。也许在那里   还有其他方式吗?

老实说,我没有找到任何优势来实例化您的服务客户端50次并让这些对象使用它们而不是“ 在某个地方创建一个要调用服务操作的变量,创建一个实例一些服务客户端 “。

你真的要在内存中有50个对象,为了什么?这是浪费记忆,毕竟你的目标是无用的。

就像说,我的业务层中有50个业务经理而且我想预加载它们......但是等等,为什么我不在代码需要时单独实例化所有人?

也许我绝对误解了你的目标,但似乎你想让你的场景过于复杂化到达同一点。

答案 1 :(得分:1)

真的,我不需要在50个对象中提供50个服务引用。在App.config中,在客户端部分我可以写:

endpoint address="" 

从我的客户代码中,在圈子中,我写道:

EndpointAddress endp = new EndpointAddress("some_ip_adress");
                            myclient.Endpoint.Address = endp;

就是这样。

感谢MatíasFidemraizer提供建议!

答案 2 :(得分:0)

您在配置中拥有的是服务和端点的配置,这不是您要实例化的内容。

实例化updater.ServiceReference1.Service1Client,它是由WSDL工具生成的代理类。实现此动态的唯一方法是使用Reflection来加载该命名空间中的类型。