一些非常基本的问题。我是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?),以便我可以更改此地址而无需重建我的应用程序?
欣赏任何形式的洞察力。 谢谢!
答案 0 :(得分:6)
在回答第一个问题时,您可以将服务引用放在自己的项目中,并在需要访问该服务的所有其他项目中引用该项目。
基本上所有的服务引用都是一堆.NET代码 - 命名空间,类等。
更好的是(!)对于WCF服务,您还可以免费获得一个接口(或多或少是您为服务定义的相同接口),因此您可以在依赖注入方面做得很好,使得测试更容易
答案 1 :(得分:4)
第一个问题 - 服务就像任何其他代码一样。例如,数据库访问代码。你应该把它放在需要访问你的数据库的每个项目中吗?不 - 你应该将它放在其他项目可以参考的项目中。
至于你的第二个问题,你正在指定命名空间,但我希望你认为你正在指定一个服务端点地址。命名空间就像一个C#代码命名空间 - 如果你有多个具有相同名称的对象,它实质上提供了进一步的识别和清晰度。通常,您使用http://mywebsite.com/MyService/VersionNumberIfRequired
或类似的命名空间。
地址本身在配置中指定。地址将根据环境/部署位置而改变 - 命名空间不应该。