【问题标题】:foreach contracts in client app from app.config file来自 app.config 文件的客户端应用程序中的 foreach 合同
【发布时间】:2011-12-21 18:46:18
【问题描述】:

我有一个问题:如何在客户端应用程序中使用“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行代码。

非常感谢!

【问题讨论】:

  • 我不明白迭代服务客户端的命名空间的目的是为了避免实例化它们 50 次。即使你迭代这些命名空间,你会得到什么好处呢?你打算在一个点上调用所有服务的操作吗?如果我错了,请纠正我,但你不需要这个。每当您需要调用服务操作时,您可能需要创建某个服务客户端的特定实例。
  • 我有一个客户端应用程序和 50 台计算机和 50 项服务。所有这些服务都连接到我的电脑。如果我想使用所有这些,我必须创建 50 个客户端对象。但我想使用“foreach”之类的东西来创建客户的对象并使用它们。也许还有其他方法?

标签: .net wcf app-config


【解决方案1】:

回答您的一位 cmets(当然还有您的问题):

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

老实说,与“在要调用服务操作的地方创建变量、创建实例相比,我发现实例化 50 次服务客户端并让这些对象使用它们没有任何优势一些服务客户的”。

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

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

也许我完全误解了您的目标,但您似乎想使您的场景过于复杂以达到同一点。

【讨论】:

  • app.config(客户端部分)中的端点名称必须不同,所以我有不同名称的对象。如果我需要使用所有这些端点,我必须创建相应的对象。或者我写 50 行代码,或者我只是(以任何方式)创建“foreach”并使用我的圈子。这可能吗?
  • 在回答你的问题之前,请先回答另一个问题:你需要在一个点上创建这50个对象的实例吗?我的意思是,你有什么方法可以把它们都弄到那里去吗?
【解决方案2】:

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

endpoint address="" 

从我的客户端代码中,我写了:

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

就是这样。

感谢 Matías Fidemraizer 的建议!

【讨论】:

    【解决方案3】:

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

    您实例化updater.ServiceReference1.Service1Client,这是一个由 WSDL 工具生成的代理类。使这种动态化的唯一方法是使用反射加载该命名空间中的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2011-05-19
      • 2017-11-19
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多