我创建了三个程序集。一个网站、一个 WCF 服务和一个包含服务实现的接口的合同程序集。我想使用 Castle Windsor 在客户端(网站)上为我创建服务,这样我就不必在网站的 web.config 中为我希望使用的每个服务创建一个端点。
我想查看合同程序集并获取命名空间中的所有服务接口。现在,在向容器注册组件时,对于每项服务,我都有类似以下内容。
container.Register(Component.For<ChannelFactory<IMyService>>().DependsOn(new { endpointConfigurationName = "MyServiceEndpoint" }).LifeStyle.Singleton);
container.Register(Component.For<IMyService>().UsingFactoryMethod((kernel, creationContext) => kernel.Resolve<ChannelFactory<IMyService>>().CreateChannel()).LifeStyle.PerWebRequest);
在我的 web.config 中,我有设置代码。
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="AuthToken" type="MyNamespace.Infrastructure.AuthTokenBehavior, MyNamespace.Contracts" />
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior>
<AuthToken />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"></readerQuotas>
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="MyServiceEndpoint" address="http://someurl/MyService.svc" binding="wsHttpBinding" contract="MyNamespace.Contracts.IMyService"></endpoint>
</client>
</system.serviceModel>
我最终得到了多个看起来几乎完全相同的服务端点,当我们部署到客户端机器上时,他们必须设置每个端点的地址,即使每个端点的基本 url 都是相同的。
我想在我的 web.config 中有一个通过代码获取的基本 url,然后使用合约程序集上的反射将服务注册到容器中。我确实需要上述配置文件中的专用端点行为。
我从哪里开始?WcfFacility 看起来很棒,但 doco 有点缺乏......