如果没有在 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 文件中有端点信息,那么一切正常。如果我把它拿出来,我会收到上面提到的错误。谢谢!