【发布时间】:2014-10-16 10:00:30
【问题描述】:
如果没有在 Web/App.config 文件中明确定义,我无法让 Windsor WCF 工具生成客户端端点。
我的合同、客户端和回调是作为服务参考生成的,我想以编程方式注册所有内容,而不使用配置文件。但是,当 App/Web.config 中不存在端点信息时,我会收到此错误:
错误:找不到引用的默认端点元素 ServiceModel 客户端中的合同“ServiceReference1.IWcfContract” 配置部分。这可能是因为没有配置文件 为您的应用程序找到,或者因为没有匹配的端点元素 该合同可以在客户端元素中找到。
注册
Component.For<IWcfContract>()
.ImplementedBy<WcfContractClient>()
.AsWcfClient(new DefaultClientModel(
WcfEndpoint
.ForContract<IWcfContract>()
.BoundTo(MyConfig.NetTcpBinding)
.At(MyConfig.WcfHostAddressAndPort)),
.LifestyleTransient());
Component.For<IWcfContractClientFactory>()
.AsFactory(new WcfContractClientFactorySelector())
类型化工厂
IWcfContractCreate(WcfContractClientCallback callback);
void Release(IWcfContractinstance);
工厂选择器
public class WcfContractClientFactorySelector : DefaultTypedFactoryComponentSelector
{
protected override IDictionary GetArguments(MethodInfo method, object[] arguments)
{
Arguments args = new Arguments();
args.Add("callbackInstance", new InstanceContext(arguments[0]));
return args;
}
}
解决客户问题
IWcfContractClientFactory factory = container.Resolve<IWcfContractClientFactory>();
IWcfContract client = factory.Create(new WcfContractClientCallback());
此时,如果我在 Web/App.config 文件中有端点信息,那么一切正常。如果我把它拿出来,我会收到上面提到的错误。谢谢!
【问题讨论】:
-
什么是
MyConfig?如果它试图去 App.config 似乎与它有关。 -
它是绑定和端点地址,可以在服务和客户端之间共享。这样我就不会在每次进行更改时更新多个配置文件。
-
问题实际上是它不会从 MyConfig 中读取。它要么是 App/Web.config,要么什么都没有。
-
可以肯定的是,您不会删除
MyConfig指向的地址,对吧?也许如果您发布了 App.config 的一小部分,它显示了您要删除的内容(注释掉)以及MyConfig指向的内容。MyConfig是你的班级,还是第 3 方班级? -
啊,我刚刚想通了。它是指向 App/Web.config 文件的服务参考合同接口上自动生成的
ServiceContractAttribute。我已将其删除,但现在有其他错误。我会尽快发布答案。
标签: c# wcf castle-windsor windsor-facilities