将WCF服务引用添加到多个项目

时间:2011-10-15 15:30:04

标签: c# wcf wcfserviceclient

一些非常基本的问题。我是WCF的新手,我正在构建一个应用程序,它有一个服务项目,一个Web应用程序项目和一些我用于业务逻辑的类库项目等。

我在我的IIS上本地托管WCF并尝试向项目添加服务引用。

问题1。在添加引用时,我应该单独为每个项目添加服务引用,还是可以在项目中共享相同的Service引用?

我问的原因是因为如果我添加单独的引用,每个引用都会获得它自己的命名空间,当我必须在项目之间传递相同的对象时,我会得到一个InvalidCastException,因为每个ServiceClient都有不同的命名空间。

示例 - 的 Site.Business.XDataService.XDataServiceClient()。的GetItem() 是不一样的 Site.Web.XDataService.XDataServiceClient()。的GetItem()

问题2。我在实现Service接口的类中指定了本地服务的地址,如下所示 -

[ServiceBehavior(Namespace =“http:// localhost:801 / XDataService.svc”,IncludeExceptionDetailInFaults = true)]

这似乎不对。如果我将我的代码移动到另一个/ live环境,我显然必须再次更改此部分并重新编译。我在哪里可以指定(Web.Config?),以便我可以更改此地址而无需重建我的应用程序?

欣赏任何形式的洞察力。 谢谢!

2 个答案:

答案 0 :(得分:6)

在回答第一个问题时,您可以将服务引用放在自己的项目中,并在需要访问该服务的所有其他项目中引用该项目。

基本上所有的服务引用都是一堆.NET代码 - 命名空间,类等。

更好的是(!)对于WCF服务,您还可以免费获得一个接口(或多或少是您为服务定义的相同接口),因此您可以在依赖注入方面做得很好,使得测试更容易

答案 1 :(得分:4)

第一个问题 - 服务就像任何其他代码一样。例如,数据库访问代码。你应该把它放在需要访问你的数据库的每个项目中吗?不 - 你应该将它放在其他项目可以参考的项目中。

至于你的第二个问题,你正在指定命名空间,但我希望你认为你正在指定一个服务端点地址。命名空间就像一个C#代码命名空间 - 如果你有多个具有相同名称的对象,它实质上提供了进一步的识别和清晰度。通常,您使用http://mywebsite.com/MyService/VersionNumberIfRequired或类似的命名空间。

地址本身在配置中指定。地址将根据环境/部署位置而改变 - 命名空间不应该。