#wcf #castle-windsor #castle #net.tcp #wcffacility
#wcf #замок-Виндзор #castle #net.tcp #wcffacility
Вопрос:
Меня смущает регистрация объекта castle 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()
)
);
Ответ №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.
Комментарии:
1. Имейте в виду возможность, когда пользователю не разрешено использовать совместное использование портов. У меня была эта проблема, я получил исключение CommunicationException с подсказкой, что я могу отредактировать раздел allowAccounts в файле SMSvcHost.exe.config, чтобы позволить пользователю это сделать. Но это решение невыполнимо, потому что файл находится в C:WindowsMicrosoft.NET … Мое решение до сих пор: удалите конечную точку Mex / PublishMetadata(). Я опубликую метаданные со второй конфигурацией привязки, если это потребуется в будущем.
2. О, и до того, как у меня была отключена «Служба общего доступа к портам Net.Tcp» в моих службах Windows. У вашего конечного пользователя это тоже может быть отключено, и ему может быть запрещено его включать (а включение с помощью установщика — не лучший вариант)