Mex problem

My application uses both NetTcpBinding and BasicHttpBinding, but each will render a subset of my service class. I created a service as shown below.

The problem is that even though I just added 3 of my Mex binding contracts, all contracts are displayed when I want to add a service to my project.

m_ServiceHost = new ServiceHost(typeof(Services), baseAddresses); 

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
basicHttpBinding.UseDefaultWebProxy = false; 

m_ServiceHost.AddServiceEndpoint(typeof( IMyFirstService), basicHttpBinding, "MyFirstService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMySecondService), basicHttpBinding, "MySecondService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMyThirdService), basicHttpBinding, "MyThirdService"); 

NetTcpBinding netTcpBinding = new NetTcpBinding(); 
netTcpBinding.MaxReceivedMessageSize = 2147483647; 
netTcpBinding.ReaderQuotas.MaxNameTableCharCount = 2147483647; 

m_ServiceHost.AddServiceEndpoint(typeof(IMyFirstService), netTcpBinding, "MyFirstService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMySecondService), netTcpBinding, "MySecondService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMyFourthService), netTcpBinding, "MyFourthService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMyFifthService), netTcpBinding, "MyFifthService"); 
m_ServiceHost.AddServiceEndpoint(typeof(IMySixService), netTcpBinding, "MySixService"); 


HttpTransportBindingElement httpTransport = new HttpTransportBindingElement(); 
httpTransport.MaxReceivedMessageSize = 2147483647; 
httpTransport.MaxBufferSize = 2147483647; 

TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement(); 
textMessageEncoding.ReaderQuotas.MaxDepth = 2147483647; 
textMessageEncoding.ReaderQuotas.MaxStringContentLength = 2147483647; 
textMessageEncoding.ReaderQuotas.MaxArrayLength = 2147483647; 
textMessageEncoding.ReaderQuotas.MaxBytesPerRead = 2147483647; 
textMessageEncoding.ReaderQuotas.MaxNameTableCharCount = 2147483647;               

System.ServiceModel.Channels.CustomBinding mexHttpCustomBinding = new System.ServiceModel.Channels.CustomBinding(textMessageEncoding, httpTransport); 
mexHttpCustomBinding.Name = "MexHttpBindingConfig"; 
               m_ServiceHost.AddServiceEndpoint(typeof(System.ServiceModel.Description.IMetadataExchange), mexHttpCustomBinding, "mex"); 

m_ServiceHost.Open(); 

      

+1


source to share


1 answer


I think the only way to achieve this is to create two separate service hosts. One for providing services over http, and the other for those undergoing net.tcp binding.



0


source







All Articles