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.

Reply via email to