我有这个 WCF 服务契约(Contract)(已大大简化,但请注意它所在的命名空间):
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 评论中的问题:
我说的是客户端。 (我忘了提到这一点;对此感到抱歉。) 这个错误可能来自服务器端吗?
我生成了上述服务契约(Contract),以及一个
BarClient
通过 Visual Studio 的添加服务引用工具实现它的类。我指定了BarService
的 URL ,这是由其他人经营的。这就是我还指定服务应该放在Foo.Services.BarService
中的地方。命名空间。我打算直接通过
BarClient
使用该服务为我自动生成的类,而不是通过ChannelFactory<BarContract>
.
最佳答案
通过添加服务引用 创建客户端不会从服务重新创建命名空间结构。所有创建的类型和契约都放置在由服务引用的名称定义的新命名空间中。所以我猜您将服务引用命名为 BarService。客户端配置必须跟在生成的合约名称之后。
关于wcf - 如何在 WCF 终结点的 XML 配置中指定协定的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688930/