I have upgraded to 2.5b2, and have gotten a wee bit further, but still no cigar.
The service host can now be created, however, it appears that not all my endpoints are being created correctly - specifically the IMetaDataExchange one. Client Code: FindResponse mexResponse = Discovery.Find(new FindCriteria(typeof(IMetadataExchange))); if (mexResponse.Endpoints.Count > 0) { if (null == endpointMetadata) { CustomBinding binding = new CustomBinding(new HttpTransportBindingElement()); MetadataExchangeClient mexClient = new MetadataExchangeClient(binding); MetadataSet metadata = mexClient.GetMetadata(mexResponse.Endpoints[0].Address); // the address will be 'http://localhost:81/MEX' MetadataImporter importer = new WsdlImporter(metadata); endpointMetadata = importer.ImportAllEndpoints(); } } The call to 'GetMetadata' fails, with $exception {"Metadata contains a reference that cannot be resolved: 'http://localhost:81/MEX'."} System.Exception {System.InvalidOperationException} Because, on the server, Windsor fails to construct the MetadatExchange endpoint ({"The type argument passed to the generic ChannelFactory class must be an interface type."}) - it is attempting to create a ChannelFactory with my concrete service type as the generic argument... which obviously isnt possible because the argument needs to be an interface type. Is this more obvious? Adam Langley Senior Developer +64 9 486 9010 alang...@winscribe.com www.winscribe.com Please consider the environment before printing this email! -----Original Message----- From: castle-project-users@googlegroups.com [mailto:castle-project-us...@googlegroups.com] On Behalf Of Adam Langley Sent: Thursday, 29 July 2010 1:30 p.m. To: castle-project-users@googlegroups.com Subject: WcfFacility does not appear to be compatible with DiscoveryEndpoint Im not sure how this is going wrong, but I have configured a Windsor component in my app.config, and a WCF Service. This service has an HTTP endpoint, and a MEX http endpoint, both of which are advertised via an HTTP 'discovery endpoint' (not UDP). Note: My WCF config works without Windsor involved (using a simple ServiceHost). The config is LIKE this (pseudo) <service name="MyService" behaviorConfiguration="RemoteDiscoveryBehavior"> <endpoint name="customerClient" address=" IMyService" binding="wsHttpBinding" bindingConfiguration="wsHttpBindingInsecure" contract="IMyService"/> <!-- this is the endpoint address that must be configured in the ServiceRouter --> <endpoint name="httpDiscoveryEpt" kind="discoveryEndpoint" bindingConfiguration="wsDualHttpBindingInsecure" binding="wsDualHttpBinding" address="Discovery"/> <!-- this is used by the Router to extract the binding information --> <endpoint address="MEX" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> My server code then looks like this: var container = new WindsorContainer(new Castle.Windsor.Configuration.Interpreters.XmlInterpreter()); DefaultServiceHostFactory factory = new DefaultServiceHostFactory(container.Kernel); var gatewayHost = factory.CreateServiceHost("MyService", new Uri[] { new Uri("http://localhost:81/") }); gatewayHost.Open(); The MyService component is instantiated by Windsor as soon as the service-host is created, but when the client attempts to perform a "Find()" to get the service information for the published endpoints, the client gets this error: {An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ----> System.InvalidOperationException: The type argument passed to the generic ChannelFactory class must be an interface type. at System.ServiceModel.ChannelFactory`1..ctor(Type channelType) at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress) at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName) at Castle.Proxies.ChannelFactory`1Proxy..ctor(IInterceptor[] , String ) --- End of inner ExceptionDetail stack trace --- at System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct& signature, RuntimeType declaringType) at System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct signature, RuntimeType declaringType) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, Object[] args) at Castle.DynamicProxy.ProxyGenerator.CreateClassProxyInstance(Type proxyType, List`1 proxyArguments, Type classToProxy, Object[] constructorArguments) at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors) at Castle.Facilities.WcfIntegration.Async.AsynChannelFactoryBuilder`1.Creat eChannelFactory(Type channelFactoryType, M clientModel, Object[] constructorArgs) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\Async\AsyncChannelFactoryBuilder.cs:line 52 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder`1.CreateChannelC reator(Type contract, M clientModel, Object[] channelFactoryArgs) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.Generic.cs:line 134 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder`1.GetChannel(M clientModel, Type contract, String configurationName) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.Generic.cs:line 114 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder`1.GetChannel(Typ e contract, String configurationName) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.Generic.cs:line 85 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder.Castle.Facilitie s.WcfIntegration.IWcfEndpointVisitor.VisitConfigurationEndpoint(Configur ationEndpointModel model) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.cs:line 92 at Castle.Facilities.WcfIntegration.ConfigurationEndpointModel.Accept(IWcfE ndpointVisitor visitor) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\WcfEndpoint.cs:line 271 at Castle.Facilities.WcfIntegration.WcfEndpointBase.Castle.Facilities.WcfIn tegration.IWcfEndpoint.Accept(IWcfEndpointVisitor visitor) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\WcfEndpoint.cs:line 103 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder.GetEndpointChann elCreator(IWcfEndpoint endpoint, Type contract) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.cs:line 68 at Castle.Facilities.WcfIntegration.AbstractChannelBuilder`1.GetChannelCrea tor(M clientModel, Type contract, IWcfBurden& burden) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\AbstractChannelBuilder.Generic.cs:line 63 at Castle.Facilities.WcfIntegration.WcfClientActivator.CreateChannelCreator Internal[M](IKernel kernel, IWcfClientModel clientModel, ComponentModel model, IWcfBurden& burden) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\WcfClientActivator.cs:line 234 at Castle.Facilities.WcfIntegration.WcfClientActivator.CreateChannelCreator (IKernel kernel, ComponentModel model, IWcfClientModel clientModel, IWcfBurden& burden) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\WcfClientActivator.cs:line 226 at Castle.Facilities.WcfIntegration.WcfClientActivator.GetChannelCreator(Cr eationContext context, IWcfBurden& burden) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\WcfClientActivator.cs:line 126 at Castle.Facilities.WcfIntegration.WcfClientActivator.Instantiate(Creation Context context) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\WcfClientActivator.cs:line 76 at Castle.Facilities.WcfIntegration.WcfClientActivator.InternalCreate(Creat ionContext context) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Client\WcfClientActivator.cs:line 68 at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create( CreationContext context) at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationCo ntext context) at Castle.MicroKernel.Lifestyle.SingletonLifestyleManager.Resolve(CreationC ontext context) at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context, Boolean track) at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext context) at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler, Type service, IDictionary additionalArguments) at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler, Type service) at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler) at Castle.MicroKernel.DefaultKernel.get_Item(String key) at Castle.Facilities.WcfIntegration.WindsorInstanceProvider.GetInstance(Ins tanceContext instanceContext, Message message) in c:\temp\Code\Castle\Castle.Facilities.Wcf\src\Castle.Facilities.WcfInteg ration\Service\WindsorInstanceProvider.cs:line 74 at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceCont ext instanceContext, Message request) at System.ServiceModel.InstanceContext.GetServiceInstance(Message message) at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(Me ssageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4( MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3( MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2( MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1( MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)} Any ideas? Adam Langley -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-us...@googlegroups.com. To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en. -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-us...@googlegroups.com. To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.