【问题标题】:Class library with service references具有服务引用的类库
【发布时间】:2010-11-08 20:43:35
【问题描述】:

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

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

我在同一解决方案中还有一个桌面应用程序,仅用于测试目的。当我运行这个应用程序时,它会抛出这个异常:

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

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

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

有什么建议吗?

谢谢!

【问题讨论】:

标签: .net web-services app-config class-library


【解决方案1】:

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

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

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

生成的代码隐藏在服务引用后面的代码中。 为了查看代码,您必须激活解决方案资源管理器的“显示所有文件”选项,并在 Reference.map 文件下查找文件 Refecence.cs(或 .vb)。

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

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

【讨论】:

  • reference.cs和他的问题有什么关系,你为什么要说修改它?我认为您应该编辑您的问题以删除该部分。
  • 因为 bloparod 不想使用配置,所以它将服务暴露给 COM。需要修改proxy对config的依赖。
  • 但是这些都没有在reference.cs中。
  • 是的,代理的构造函数有那个引用,它只是 URL。除非您提供静态 URL。如果你这样做,你就不需要配置文件了。
【解决方案2】:

感谢两位的快速回答 =)。我会考虑的。

我刚刚从服务参考更改为 Web 参考。这消除了在客户端中拥有配置信息的需要(在我的例子中是一个 Delphi 桌面应用程序),真的,我不知道该怎么做=P。

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

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

再次感谢你们!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多