代码之家  ›  专栏  ›  技术社区  ›  bloparod

带有服务引用的类库

  •  8
  • bloparod  · 技术社区  · 17 年前

    我有一个类库(.NET),其中引用了一个web服务(在某些服务器中,不是同一解决方案中的项目)。类库有一个向COM公开的类。此类调用web服务。

    当我添加服务引用时,这会将代码添加到类库的app.config中。

    我在同一个解决方案中还有一个桌面应用程序,只是为了测试。运行此应用程序时,它会引发以下异常:

    在ServiceModel客户端配置节中找不到引用约定“ServiceProxy.EventsServices”的默认终结点元素。这可能是因为找不到应用程序的配置文件,或者在客户端元素中找不到与此约定匹配的端点元素。

    通过将类库的app.config中服务引用的生成代码复制并粘贴到桌面应用程序的config文件中,可以解决此异常。

    当我部署时,我必须只部署DLL(从类库构建),而不是桌面应用程序。我需要在DLL可以读取的配置文件中包含服务引用。

    有什么建议吗?

    谢谢

    3 回复  |  直到 17 年前
        1
  •  6
  •   David Lay    17 年前

    添加服务引用时,Visual Studio将为您生成一个代理,该代理将读取app.config文件中的服务url。

    您可以选择提供不使用配置文件的静态URL。

    如果您想变得复杂,并在没有app.config设置的情况下提供动态URL,您可以复制生成的代码并对其进行修改,以使用另一种源来获取配置数据(例如参数),这样您就可以只部署dll。

    生成的代码隐藏在服务引用的代码后面。

    您不应该直接修改此代码,而是复制代码,然后在结构中创建一个新类。(并删除原始参考)

    请注意,如果修改服务(或Wsdl),则必须手动修改该类。

        2
  •  3
  •   bloparod    17 年前

    我刚从服务参考改为网络参考。这样就不需要在客户机中有配置信息(在我的例子中是一个Delphi桌面应用程序),实际上,我不知道如何做。

    使用Web引用而不是服务引用生成要保存在类库中的引用。正如David所说,它由代理使用,不能从配置文件中更改,因为DLL没有配置文件(正如John所说)。

    到目前为止,我的解决方案将是使用Web引用。我想我必须编写一些机制,以便从文件中进行配置。

    再次感谢你们两位!

        3
  •  2
  •   John Saunders    17 年前

    NET配置API的所有使用都从应用程序的配置文件获取配置。没有DLL配置文件——类库中的app.config只是显示需要复制的内容。

    现在,如果您只能部署程序集,那么您的程序集将需要在代码中配置自身。