大连融科 WMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 lines
3.5 KiB

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Configuration;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
namespace SiaSun.LMS.WinService
{
public class ServiceHostGroup
{
public static List<ServiceHost> _hosts = new List<ServiceHost>();
/// <summary>
/// ¿ªÊ¼·þÎñ
/// </summary>
private static void OpenHost(Type t, string iType, string url, string binding)
{
ServiceHost hst = new ServiceHost(t, new Uri(string.Format(url,Program._BaseUrl )));
ServiceThrottlingBehavior throttlingBehavior = hst.Description.Behaviors.Find<ServiceThrottlingBehavior>();
if (throttlingBehavior == null)
{
throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = 3000, MaxConcurrentSessions = 3000 };
hst.Description.Behaviors.Add(throttlingBehavior);
}
else
{
throttlingBehavior.MaxConcurrentCalls = 3000;
throttlingBehavior.MaxConcurrentSessions = 3000;
}
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
hst.Description.Behaviors.Add(smb);
hst.AddServiceEndpoint(iType, SiaSun.LMS.Common.WCFHelper.CreateBinding(binding), "");
hst.Open();
_hosts.Add(hst);
}
/// <summary>
/// Æô¶¯ËùÓÐÅäÖÃÎļþÖеķþÎñ
/// </summary>
public static void StartAllConfiguredServices()
{
ConfiguredServices services = ConfiguredServices.LoadFromFile("services.xml");
foreach (ConfiguredService svc in services.Services)
{
Type svcType = Type.GetType(svc.Type);
string svcIType = svc.iType;
string binding = svc.binding;
string url = svc.URL;
if (svcType == null) throw new Exception("ÅäÖÃÎļþÖеķþÎñÀàÐÍ " + svc.Type + "ÎÞЧ");
OpenHost(svcType, svcIType, url, binding);
}
}
/// <summary>
/// ¹Ø±ÕËùÓзþÎñ
/// </summary>
public static void CloseAllServices()
{
foreach (ServiceHost hst in _hosts)
{
hst.Close();
}
}
}
[XmlRoot("configuredServices")]
public class ConfiguredServices
{
public static ConfiguredServices LoadFromFile(string filename)
{
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + filename)) return new ConfiguredServices();
XmlSerializer ser = new XmlSerializer(typeof(ConfiguredServices));
using (FileStream fs = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + filename))
{
return (ConfiguredServices)ser.Deserialize(fs);
}
}
[XmlElement("service", typeof(ConfiguredService))]
public List<ConfiguredService> Services = new List<ConfiguredService>();
}
public class ConfiguredService
{
[XmlAttribute("type")]
public string Type;
[XmlAttribute("itype")]
public string iType;
[XmlAttribute("binding")]
public string binding;
[XmlAttribute("url")]
public string URL;
}
}