When hosting wcf service which is use net tcp binding and without port sharing in a windows service , we should make sure the availability of our wcf port number. Other wise service doesn't start.
There fore as a best practice its is better to have code which will check the availability of the port when starting the service.This code should included to the service startup event.
1: protected override void OnStart(string[] args)
2: {
3: try
4: {
5: if (serviceHost != null)
6: {
7: serviceHost.Close();
8: }
9:
10: PortChecker pc = new PortChecker();
11:
12: if (pc.IsPortAvailable())
13: {
14: serviceHost = new ServiceHost(typeof(M3ISPlusService));
15: serviceHost.Open();
16: }
17: }
ANd this is the port checker class
1: public bool IsPortAvailable()
2: {
3: bool isAvailable = false;
4: TcpListener tcpListner = new TcpListener(GetServerIp(), GetPort());
5: Logger logger = Logger.GetLogger();
6:
7: try
8: {
9: tcpListner.Start();
10: isAvailable = true;
11: }
12: catch (Exception ex)
13: {
14: logger.Log(ex.Message);
15: }
16:
17: finally
18: {
19: try
20: {
21: tcpListner.Stop();
22: tcpListner = null;
23: }
24: catch (Exception)
25: {
26: tcpListner = null;
27: }
28: }
29:
30: return isAvailable;
31: }
To get port in code please refer my previous post :- Read End point address programmatically
Happy Coding :)
No comments:
Post a Comment