Нужен ли файл svc для настройки Castle Wcf Facility для служб, отличных от HTTP?

Я запутался в регистрации объекта замка 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()
    )
);

person Serdar    schedule 03.11.2011    source источник


Ответы (1)


Если вы хотите опубликовать метаданные, вам нужно будет включить совместное использование порта (чтобы конечная точка MEX использовала тот же порт, что и обычный порт TCP — вы получите исключение AddressAlreadyInUse, если для этого параметра установлено значение false), и вам, вероятно, потребуется указать порт в вашем 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()
    )
);

Это прекрасно работает с Castle Windsor 3.0.

person kmp    schedule 22.12.2011
comment
Помните о возможности, когда пользователю не разрешено использовать совместное использование портов. У меня была эта проблема, я получил CommunicationException с подсказкой, что я могу отредактировать раздел allowAccounts в файле SMSvcHost.exe.config, чтобы позволить пользователю сделать это. Но это решение неосуществимо, потому что файл находится в C:\Windows\Microsoft.NET\... Мое решение на данный момент: удалить конечную точку Mex/PublishMetadata(). Я опубликую метаданные со второй конфигурацией привязки, если это потребуется в будущем. - person this.myself; 03.07.2013
comment
О, и до того, как я отключил службу общего доступа к портам Net.Tcp в своих службах Windows. У вашего конечного пользователя это тоже может быть отключено, и ему может быть не разрешено включать его (и включение его с помощью установщика - не очень хороший вариант) - person this.myself; 03.07.2013