如何在WCF端点的XML配置中指定合同的命名空间?

时间:2011-01-14 07:43:38

标签: wcf namespaces contract endpoint xml-configuration

我有这个WCF服务合同(大大简化了,但要注意它所在的命名空间):

namespace Foo.Services.BarService
{
    [ServiceContract]
    interface BarContract {... }
}

在我的app.config(客户端)中,我为某些服务配置端点:

<endpoint address="..."
          binding="..."
          contract="Foo.Services.BarService.BarContract" />

但是,这会导致错误,指出在支持BarService.BarContract的客户端配置中未找到任何端点。我只能通过将contract属性值更改为BarService.BarContract(即删除命名空间)来消除此错误。

为什么?这个错误可能来自哪里?为什么我不能提到合同类型的命名空间部分?在WCF找不到匹配的端点时,这不应该导致更多结果吗?


回复@Ladislav Mrnka的评论如下:

  • 我在谈论客户端。 (我忘了这一点;对不起。) 这个错误可能来自服务器端吗?

  • 我通过Visual Studio的添加服务参考工具生成了上述服务合同以及实现它的BarClient类。我指定了由其他人运行的BarService的网址。我还指定该服务应放在Foo.Services.BarService名称空间中。

  • 我将直接通过自动为我生成的BarClient类使用该服务,而不是通过ChannelFactory<BarContract>

1 个答案:

答案 0 :(得分:3)

通过添加服务引用创建客户端不会从服务重新创建名称空间结构。所有创建的类型和合同都放在由服务引用名称定义的新名称空间中。所以我猜你的服务引用名为BarService。客户端配置必须遵循生成的合同的名称。