首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Castle-Windsor的主机WCF服务在IIS外部,仅使用代码

带有Castle-Windsor的主机WCF服务在IIS外部,仅使用代码
EN

Stack Overflow用户
提问于 2010-07-30 18:52:21
回答 3查看 1.5K关注 0票数 1

我正在尝试使用Castle-Windsor 2.5 (.NET 4)在控制台应用程序中托管一个WCF服务,代码如下:

代码语言:javascript
复制
        new WindsorContainer()
            .AddFacility<WcfFacility>()
            .Register(
            Component.For<IMyService>().ImplementedBy<MyService>()
                          .ActAs(new DefaultServiceModel()
                                             .AddEndpoints(
                                             WcfEndpoint.BoundTo(new BasicHttpBinding()).At("http://localhost:1010/MyService"),
                                             WcfEndpoint.BoundTo(MetadataExchangeBindings.CreateMexHttpBinding()).At("http://localhost:1010/MyService/mex"))
                                         ));

如果可能的话,我没有也不希望在我的app.config中有任何WCF配置。

然而,这似乎不起作用(没有抱怨,但WcfTestUtil看不到服务)。

我错过了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-22 17:11:15

我把这个问题贴在了城堡谷歌群组上,并得到了更好的反馈,但由于这比谷歌群组更友好(讽刺!),我将在这里为其他人张贴答案的链接:http://groups.google.com/group/castle-project-users/browse_thread/thread/d670d8f1d7aae0ab

票数 3
EN

Stack Overflow用户

发布于 2013-03-05 07:40:53

基于来自Google Groups的Khash链接,以下是实现此功能的最低限度的代码:

代码语言:javascript
复制
public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container
        .AddFacility<WcfFacility>()
        .Register(
            Component.For<ICoreService>()
            .ImplementedBy<CoreService>()
            .AsWcfService(new DefaultServiceModel()
                .AddBaseAddresses("http://localhost:1000/core")
                .AddEndpoints(WcfEndpoint.BoundTo(new BasicHttpBinding()))
                    .PublishMetadata(o => o.EnableHttpGet()))
    );
}
票数 1
EN

Stack Overflow用户

发布于 2014-09-26 15:14:49

我正在使用wcfFacility 3.3.0并在windows服务中托管wcf服务dll这是我的工作组件注册:(add Hosted() )

代码语言:javascript
复制
public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<LoggingFacility>(f => f.UseLog4Net());

        container
            .AddFacility<WcfFacility>(f =>
            {
                f.CloseTimeout = TimeSpan.Zero;
            });


        string baseAddress = "http://localhost:8744/TVIRecorderWcfService/";

        container.Register(

            Component
                .For<ITVIRecorderWcfService>()
                .ImplementedBy<TVIRecorderWcfService>()
                .AsWcfService(
                new DefaultServiceModel()
                    .AddBaseAddresses(baseAddress)
                    .Hosted()
                    //publish metadata doesn't work, have to do differently
                    //.PublishMetadata(x => x.EnableHttpGet()).Discoverable()
                    .AddEndpoints(WcfEndpoint
                        .BoundTo(new BasicHttpBinding()))
                        //.PublishMetadata(x=>x.EnableHttpGet()).Discoverable()
                        ).LifestyleSingleton()
                        ,

            Component
                .For<ServiceBase>()
                .ImplementedBy<TVIRecorderService>());
    }

要被WcfTestClient工具看到,服务必须发布它的serviceMetadata我必须在实例化我的ServiceHost之后手动添加serviceBehaviour和MetadataExchangeBindings

代码语言:javascript
复制
var binding = MetadataExchangeBindings.CreateMexHttpBinding();
var mexAddress = "http://localhost:8744/TVIRecorderWcfService/mex";
var behaviour = new ServiceMetadataBehavior() {HttpGetEnabled = true};


serviceHost.Description.Behaviors.Add(behaviour);
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3370761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档