如何在WCF终结点的XML配置中指定契约的命名空间?

3

我有一个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的URL。那里我还指定了该服务应放在Foo.Services.BarService命名空间中。

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


问题出在服务端还是客户端配置上?你是如何创建客户端的? - Ladislav Mrnka
@Ladislav,我在我的问题末尾添加了对你的问题的回复。 - stakx - no longer contributing
1个回答

3
使用“添加服务引用”创建客户端时,不会从服务中重新创建命名空间结构。所有创建的类型和契约都将放置在由服务引用名称定义的新命名空间中。因此,我想你将服务引用命名为BarService。客户端配置必须遵循生成的契约名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接