我的应用程序使用NetTcpBinding和BasicHttpBinding,但每个都会公开我的服务类的子集。我已经创建了如下服务。
问题在于,即使我刚刚将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 :(得分:0)
我认为唯一可以实现此目的的方法是创建两个单独的服务主机。一个用于通过http公开的服务,一个用于通过net.tcp绑定公开的服务。