带有服务引用的类库

时间:2009-07-07 21:37:08

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

我有一个类库(.NET),它引用了一个Web服务(在某些服务器中,而不是同一解决方案中的项目)。类库有一个暴露给COM的类。该类调用Web服务。

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

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

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

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

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

有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:6)

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

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

如果您想变得复杂,并且在没有app.config设置的情况下提供动态URL,您可以复制此生成的代码并对其进行修改以使用其他类型的配置数据源(例如参数)和那种方式你可以只部署dll。

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

谢谢你们快速回答=)。我会考虑到这一点。

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

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

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

再次感谢你们两位!