2

我有这个 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实现它的类。我指定了由其他人运行的 URL 。那就是我还指定应该将服务放在命名空间中的地方。BarServiceFoo.Services.BarService

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

4

1 回答 1

3

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

于 2011-01-14T12:30:27.213 回答