2008-11-08 4 views
1

В моем приложении используются как NetTcpBinding, так и BasicHttpBinding, но каждый из них будет отображать подмножество моего класса обслуживания. Я создал службу, как показано ниже.Проблема с использованием Mex

Проблема в том, что, хотя я только что добавил 3 моих контракта на привязку к Mex, все контракты отображаются, когда я хочу добавить сервис в свой проект.

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(); 
+0

Выполнено. Оригинальный вопрос просто связан с http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/0fe0e548-2063-4cb0-b216-03d19afd9f09. – 2008-11-08 14:55:42

ответ

0

Я думаю, что единственный способ добиться этого - создать два отдельных служебных хоста. Один для предоставления услуг через http, а другой - для тех, кто подвергается связыванию net.tcp.