5

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

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

问题 1.添加引用时,我应该为每个项目单独添加服务引用还是有办法在项目之间共享相同的服务引用?

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

示例 - Site.Business.XDataService.XDataServiceClient().GetItem() 与 Site.Web.XDataService.XDataServiceClient().GetItem() 不同

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

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

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

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

4

2 回答 2

6

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

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

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

于 2011-10-15T15:52:26.040 回答
4

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

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

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

于 2011-10-15T16:05:11.237 回答