9

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

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

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

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

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

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

有什么建议么?

谢谢!

4

3 回答 3

6

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

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

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

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

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

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

于 2009-07-07T21:51:51.167 回答
3

谢谢你们俩的快速回答=)。我会考虑的。

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

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

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

再次感谢你们俩!

于 2009-07-07T22:25:47.730 回答
2

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

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

于 2009-07-07T22:01:24.550 回答