我是否需要svc文件来为非HTTP服务设置Castle Wcf Facility

Ser*_*dar 6 wcf castle-windsor castle net.tcp wcffacility

我对城堡wcf设施登记感到困惑.

我读了一些BasicHttpBinding的博客文章.但是找不到一个清晰简单的样本来设置net.tcp设置.

我想从控制台应用程序托管服务...

我写了这样的东西......你能在这里看到问题吗?

_container = new WindsorContainer();
_container.AddFacility<WcfFacility>();

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>()
    .AsWcfService(
        new DefaultServiceModel()
            .AddEndpoints(WcfEndpoint
                    .BoundTo(new NetTcpBinding() { PortSharingEnabled = false })
                    .At("net.tcp://localhost/MembershipService")
            )
            .PublishMetadata()
    )
);
Run Code Online (Sandbox Code Playgroud)

kmp*_*kmp 4

如果您希望发布元数据,则需要启用端口共享(让 MEX 端点与常规 TCP 端口共享相同的端口 - 如果将此设置为 false,您将收到 AddressAlreadyInUse 异常),并且您可能需要指定URL 上的端口(不确定 TCP 会使用哪个端口),所以您的代码应该是(假设端口 8080 适合您):

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>()
    .AsWcfService(
        new DefaultServiceModel()
            .AddEndpoints(WcfEndpoint
                    .BoundTo(new NetTcpBinding() { PortSharingEnabled = true})
                    .At("net.tcp://localhost:8080/MembershipService")
            )
            .PublishMetadata()
    )
);
Run Code Online (Sandbox Code Playgroud)

使用 Castle Windsor 3.0 效果很好。