请教WCF的Endpoints Configuration问题
WCF 的Endpoints Configuration如果存在数据库表的某个字段而非配置文件,类型为string或xml。如果创建ServerHost?谢谢指教。
------解决方案--------------------所有写在app.config中与ENDPOINT有关的配置都可以用其他方式存储及获得
例如:
public CustomServiceHost(Uri uri, string configData)
{
this.InitConfig(configData);
this.InitializeDescription(new UriSchemeKeyedCollection(new Uri[] { uri }));
}
private void InitConfig(string configData)
{
this._config = ConfigHelper.GetConfig(configData);
ValidateConfig(configData);
}
private void ValidateConfig(string configData)
{
//TODO:
}
System.Configuration.Configuration _config;
public System.Configuration.Configuration Config
{
get { return _config; }
set { _config = value; }
}
protected override System.ServiceModel.Description.ServiceDescription CreateDescription(out IDictionary <string, System.ServiceModel.Description.ContractDescription> implementedContracts)
{
Dictionary <string, ContractDescription> contracts = new Dictionary <string, ContractDescription> ();
List <ServiceEndpoint> endpoints = new List <ServiceEndpoint> ();
Configuration c = this.Config;
ServicesSection ss = c.GetSection( "system.serviceModel/services ") as ServicesSection;
ServiceElement service = ss.Services[0];
ServiceEndpointElement epe = service.Endpoints[0];
ContractDescription cd = ContractDescription.GetContract(ContractType(epe.Contract));
contracts.Add(cd.Name, cd);
foreach (OperationDescription od in cd.Operations)
od.Behaviors.Add(new AdapterOperationBehavior());
Binding b = GetBinding(epe.Binding);
EndpointAddress ea = new EndpointAddress(epe.Address);
ServiceEndpoint ep = new ServiceEndpoint(cd, b, ea);
endpoints.Add(ep);
ServiceDescription sd = new ServiceDescription(endpoints);
ServiceBehaviorAttribute sb = new ServiceBehaviorAttribute();
sb.SetWellKnownSingleton(this);
sb.InstanceContextMode = InstanceContextMode.Single;
sd.Behaviors.Add(sb);
//add behaviors
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
sd.Behaviors.Add(smb);
implementedContracts = contracts;
return sd;
}
private Binding GetBinding(string name)
{
BindingsSection bindings = this.Config.GetSection( "system.serviceModel/bindings ") as BindingsSection;
BindingCollectionElement bc = bindings[name];
Binding b = Activator.CreateInstance(bc.BindingType) as Binding;
return b;
}
Type ContractType(string type)
{
Type t = null;
t = Type.GetType(type);
return t;
}