| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
-
- using System;
- using System.Collections.Generic;
- using System.Text;
- //using Curtain.WCF.Contract;
- namespace Curtain.WCF.Proxy
- {
- /// <summary>
- /// 服务代理配置
- /// </summary>
- public class WCFProxySetting
- {
- #region 常量
- private const string LOCALHOST = "localhost";
- private const string IP127001 = "127.0.0.1";
- /// <summary>
- /// 10天
- /// </summary>
- public const double OPERATION_TIMEOUT_10D = 14400d;
- /// <summary>
- /// 20天
- /// </summary>
- public const double OPERATION_TIMEOUT_MAX = 28800d;
- /// <summary>
- /// 默认配置
- /// </summary>
- public const string DefaultSettingName = "Default";
- #endregion
- #region 成员变量
- private int _version = 1;
- private readonly string _settingID = Guid.NewGuid().ToString("N");
- private readonly string _name = null;
- private string _serviceName = "WCFService";
- private string _ip = LOCALHOST;
- private string _port = "8888";
- private string _uri = "net.tcp://localhost:8888/WCFService";
- private string _binding = "http://";
- private string _suffix = "";
- #endregion
- #region 默认配置
- /// <summary>
- /// 默认配置
- /// </summary>
- private static WCFProxySetting _defaultSetting = null;
- /// <summary>
- /// 默认配置
- /// </summary>
- public static WCFProxySetting DefaultSetting
- {
- get
- {
- if (_defaultSetting == null)
- {
- _defaultSetting = new WCFProxySetting(DefaultSettingName);
- //_defaultSetting._settingID = DefaultSettingID;
- }
- return _defaultSetting;
- }
- }
- ///// <summary>
- ///// 默认认证消息
- ///// </summary>
- //public static AuthInfo DefaultAuthInfo
- //{
- // get
- // {
- // return DefaultSetting.AuthInfo;
- // }
- //}
- #endregion
- #region 属性
- ///// <summary>
- ///// 配置ID
- ///// </summary>
- //public string SettingID
- //{
- // get
- // {
- // return this._settingID;
- // }
- //}
- public string Name
- {
- get
- {
- return this._name;
- }
- }
- /// <summary>
- /// 配置版本
- /// </summary>
- public int Version
- {
- get
- {
- return this._version;
- }
- }
- /// <summary>
- /// 服务名
- /// </summary>
- public string ServiceName
- {
- get
- {
- return this._serviceName;
- }
- }
- /// <summary>
- /// IP
- /// </summary>
- public string IP
- {
- get
- {
- return this._ip;
- }
- }
- /// <summary>
- /// 端口
- /// </summary>
- public string Port
- {
- get
- {
- return this._port;
- }
- }
- /// <summary>
- ///
- /// </summary>
- public string Binding
- {
- get
- {
- return this._binding;
- }
- set
- {
- this._binding = value;
- }
- }
- /// <summary>
- ///
- /// </summary>
- public string Suffix
- {
- get
- {
- return this._suffix;
- }
- set
- {
- this._suffix = value;
- }
- }
- /// <summary>
- /// URI
- /// </summary>
- public string Uri
- {
- get
- {
- return this._uri;
- }
- }
- /// <summary>
- /// 0=自动 1=直连 2=内网 3=外网
- /// </summary>
- public int Type
- {
- get;
- set;
- } = 0;
- #endregion
- #region 构造
- /// <summary>
- /// 服务代理配置
- /// </summary>
- private WCFProxySetting()
- {
- this._name = this._settingID;
- }
- private WCFProxySetting(string name)
- {
- this._name = name;
- }
- /// <summary>
- /// 服务代理配置
- /// </summary>
- /// <param name="ip"></param>
- /// <param name="port"></param>
- /// <param name="serviceName"></param>
- private WCFProxySetting(string name, string ip, string port, string serviceName = null)
- {
- if (string.IsNullOrWhiteSpace(ip))
- {
- throw new ArgumentNullException("ip");
- }
- if (string.IsNullOrWhiteSpace(port))
- {
- throw new ArgumentNullException("port");
- }
- this._name = name;
- this._ip = ip;
- this._port = port;
- this._serviceName = serviceName;
- this.SetUri();
- }
- /// <summary>
- /// 服务代理配置
- /// </summary>
- /// <param name="ip"></param>
- /// <param name="port"></param>
- /// <param name="serviceName"></param>
- public WCFProxySetting(string ip, string port, string serviceName = null)
- {
- if (string.IsNullOrWhiteSpace(ip))
- {
- throw new ArgumentNullException("ip");
- }
- if (string.IsNullOrWhiteSpace(port))
- {
- throw new ArgumentNullException("port");
- }
- this._name = this._settingID;
- this._ip = ip;
- this._port = port;
- this._serviceName = serviceName;
- this.SetUri();
- }
- #endregion
- #region 公有方法
- /// <summary>
- /// 获取终结点地址
- /// </summary>
- /// <param name="endpointAddress"></param>
- /// <returns>终结点地址</returns>
- public string GetEndpointAddress(string endpointAddress)
- {
- if (string.IsNullOrWhiteSpace(endpointAddress))
- {
- throw new ArgumentNullException("endpointAddress");
- }
- if (string.IsNullOrWhiteSpace(this._ip))
- {
- return string.Empty;
- }
- //StringBuilder uri = new StringBuilder(this._binding);
- //uri.Append(this._ip);
- //if (!string.IsNullOrWhiteSpace(this._port))
- //{
- // uri.Append(":");
- // uri.Append(this._port);
- //}
- //uri.Append("/");
- //if (!string.IsNullOrWhiteSpace(this._serviceName))
- //{
- // uri.Append(this._serviceName);
- // uri.Append("/");
- //}
- StringBuilder uri = new StringBuilder(this._uri);
- if (!string.IsNullOrWhiteSpace(endpointAddress))
- {
- if (!this._uri.EndsWith("/"))
- {
- uri.Append("/");
- }
- uri.Append(endpointAddress);
- }
- uri.Append(this._suffix);
- return uri.ToString();
- }
- /// <summary>
- /// 重设服务连接地址
- /// </summary>
- /// <param name="ip"></param>
- /// <param name="port"></param>
- /// <param name="serviceName"></param>
- public void ResetRemoteAddress(string ip, string port, string serviceName = null)
- {
- if (string.IsNullOrWhiteSpace(ip))
- {
- throw new ArgumentNullException("ip");
- }
- if (ip == IP127001 || ip == ".")
- {
- ip = LOCALHOST;
- }
- bool change = false;
- if (this._ip != ip)
- {
- this._ip = ip;
- change = true;
- }
- if (this._port != port)
- {
- this._port = port;
- change = true;
- }
- if (this._serviceName != serviceName)
- {
- this._serviceName = serviceName;
- change = true;
- }
- if (change)
- {
- this.SetUri();
- this._version++;
- }
- }
- #endregion
- #region 私有方法
- /// <summary>
- /// 设置服务URI
- /// </summary>
- public void SetUri()
- {
- if (string.IsNullOrWhiteSpace(this._ip))
- {
- this._uri = string.Empty;
- return;
- }
- StringBuilder uri = new StringBuilder(this._binding);
- uri.Append(this._ip);
- if (!string.IsNullOrWhiteSpace(this._port))
- {
- uri.Append(":");
- uri.Append(this._port);
- }
- uri.Append("/");
- if (!string.IsNullOrWhiteSpace(this._serviceName))
- {
- uri.Append(this._serviceName);
- }
- this._uri = uri.ToString();
- }
- #endregion
- #region 消息头相关
- /*
- /// <summary>
- /// 消息头名
- /// </summary>
- public string MessageName
- {
- get;
- set;
- }
- /// <summary>
- /// 消息头命名空间
- /// </summary>
- public string MessageNameSpace
- {
- get;
- set;
- }
- /// <summary>
- /// 消息头内容
- /// </summary>
- public Parameters MessageValue
- {
- get;
- }
- */
- ///// <summary>
- ///// 认证信息(非SOAP)
- ///// </summary>
- //public AuthInfo AuthInfo
- //{
- // get;
- // set;
- //}
- #endregion
- #region 重写方法
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
- public static bool Equals(WCFProxySetting d, WCFProxySetting t)
- {
- if (d == null && t == null)
- {
- return true;
- }
- if (d == null)
- {
- return false;
- }
- if (t == null)
- {
- return false;
- }
- return d._settingID == t._settingID;
- }
- public override bool Equals(object o)
- {
- if (o is WCFProxySetting)
- {
- return Equals(this, o as WCFProxySetting);
- }
- return false;
- }
- //public static bool operator ==(ProxySettings d, ProxySettings t)
- //{
- // return ProxySettings.Equals(d, t);
- //}
- //public static bool operator !=(ProxySettings d, ProxySettings t)
- //{
- // return !ProxySettings.Equals(d, t);
- //}
- #endregion
- #region 配置管理
- private static readonly Dictionary<string, WCFProxySetting> Settings = new Dictionary<string, WCFProxySetting>();
- /// <summary>
- /// 创建配置(name 为 null 或 "Default" 时 返回默认配置)
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public static WCFProxySetting CreateSetting(string name)
- {
- if (string.IsNullOrWhiteSpace(name) || DefaultSettingName == name)
- {
- return DefaultSetting;
- }
- if (Settings.ContainsKey(name))
- {
- return Settings[name];
- }
- WCFProxySetting setting = new WCFProxySetting(name);
- Settings.Add(name, setting);
- return setting;
- }
- /// <summary>
- /// 创建配置(name 为 null 或 "Default" 时 返回默认配置,但不修改ip、port、serviceName)
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public static WCFProxySetting CreateSetting(string name, string ip, string port, string serviceName = null)
- {
- if (string.IsNullOrWhiteSpace(name) || DefaultSettingName == name)
- {
- //WCFProxySetting s = DefaultSetting;
- //if (s.IP != ip || s.Port != port || s.ServiceName != serviceName)
- //{
- // s.ResetRemoteAddress(ip, port, serviceName);
- //}
- //return s;
- return DefaultSetting;
- }
- if (Settings.ContainsKey(name))
- {
- WCFProxySetting s = Settings[name];
- if (s.IP != ip || s.Port != port || s.ServiceName != serviceName)
- {
- s.ResetRemoteAddress(ip, port, serviceName);
- }
- return s;
- }
- WCFProxySetting setting = new WCFProxySetting(name, ip, port, serviceName);
- Settings.Add(name, setting);
- return setting;
- }
- /// <summary>
- /// 判断配置是否存在(name 为 null 或 "Default" 时 返回默认配置)
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public static bool ContainsName(string name)
- {
- if (string.IsNullOrWhiteSpace(name) || DefaultSettingName == name)
- {
- return true;
- }
- return Settings.ContainsKey(name);
- }
- /// <summary>
- /// 获取配置(name 为 null 或 "Default" 时 返回默认配置)
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public static WCFProxySetting GetSetting(string name)
- {
- if (string.IsNullOrWhiteSpace(name) || DefaultSettingName == name)
- {
- return DefaultSetting;
- }
- if (Settings.ContainsKey(name))
- {
- return Settings[name];
- }
- return null;
- }
- /// <summary>
- /// 删除配置(name 为 null 或 "Default" 时 为默认配置,不能删除)
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public static bool RemoveSetting(string name)
- {
- if (string.IsNullOrWhiteSpace(name) || DefaultSettingName == name)
- {
- return false;
- }
- return Settings.Remove(name);
- }
- #endregion
- }
- }
|