ChannelFactory在端点上没有地址,为什么?

时间:2008-11-18 00:05:50

标签: .net wcf configuration c#-3.0

当我创建ChannelFactory的新实例时:

var factory = new ChannelFactory<IMyService>();

我创建了一个新频道,我有一个例外,说Endpoint的地址为空。

我在web.config中的配置如上所述,一切都是应该的(特别是端点的地址)。

如果我创建一个新的MyServiceClientBase,它会从我的通道工厂加载所有配置:

var factoryWithClientBase = new MyServiceClientBase().ChannelFactory;
Console.WriteLine(factoryWithClientBase.Endpoint.Address); //output the configuration inside the web.config


var factoryWithChannelFactory = new ChannelFactory<IMyService>();
Console.WriteLine(factoryWithChannelFactory.Endpoint.Address); //output nothing (null)

为什么?

3 个答案:

答案 0 :(得分:9)

如果在Web.Config:

中为端点提供类似名称,它是否有效
<endpoint address="http://localhost:2000/MyService/" binding="wsHttpBinding"
    behaviorConfiguration="wsHttpBehaviour" contract="IService"
    name="MyWsHttpEndpoint" />

使用ChannelFactory创建频道,如下所示:

var factory = new ChannelFactory<IMyService>("MyWsHttpEndpoint");

答案 1 :(得分:5)

我终于找到了答案。 ChannelFactory不会从您的Web.Config / app.config中读取信息。 ClientBase(然后使用ChannelFactory)可以。

所有这些都花了我几个小时的工作,但我终于找到了一个合理的理由。

:)

答案 2 :(得分:3)

由new运算符实例化的ChannelFactory从web.config读取。上面的AnAngel回答是正确的。 您只需确保为端点提供名称。 并确保正确设置端点合约(非常重要)

我有一段经验,我的web.config是由VS生成的,并且端点契约设置为ServiceReference中的合同(作为添加服务引用的结果),这不是我想要的。虽然它与我的原始合同具有相似的名称(但位于不同的名称空间中)

<endpoint address="http://localhost:2000/MyService/" binding="wsHttpBinding"
behaviorConfiguration="wsHttpBehaviour" contract="TheCorrectNamespace.IService"
name="MyWsHttpEndpoint" />

提问者没有发布他的web.config所以我假设你很可能犯了我做的错误(指定端点的错误合同)