国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

檢測WCF服務是否在線第二版

2019-11-14 13:43:57
字體:
來源:轉載
供稿:網友

上一版在這里http://www.survivalescaperooms.com/kklldog/p/4878296.html

上一版主要是解決了監控服務不需要手動添加服務引用的問題,但是還是需要在配置文件中添加對應的endpoint信息,以及需要真正的contract接口的dll文件來實現反射生成wcf通道。

這樣其實還是挺繁瑣的,每添加一個監控的服務,都需要修改一堆配置,外加復制一堆dll。新版中已經不需要復制真正的contract的dll文件跟endpoint配置了。

上一版我需要contract的dll一是為了反射去創建wcf調用通道,二是為了調用其中一個真正的方法。其實可以使用一個假的contract接口跟一個假的方法來探測就可以。

因為就算使用假的contract接口通道也是可以建立的,調用一個不存在的方法會報一個System.ServiceModel.ActionNotSupportedException的異常,這表明服務是存在的。

然后我們只需要一個假的contract接口:

  [ServiceContract]    public interface IFakeWcfInterface    {        [OperationContract]        string ThisIsATestMethod();    }

  然后使用ChanelFactory去構造通道,這次不用反射了,更加簡單。為了移除endpoint的配置文件,我們直接手動用代碼實例化一個ServiceEndpoint。我這邊所有的服務的binding都是統一的,所以可以寫死了,如果每個服務的binding等信息都不一樣,那么還需要抽象到config文件里了。

測試是否alive:

  PRivate bool IsALive(string endpointName,string url)        {            try            {                FuncExtension.TryDo(() =>                {                    var endpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IFakeWcfInterface)), new NetTcpBinding(SecurityMode.None), new EndpointAddress(url));                    var channelFactory = new ChannelFactory<IFakeWcfInterface>(endpoint);                    var proxy = channelFactory.CreateChannel();                    try                    {                        proxy.ThisIsATestMethod();                    }                    catch (Exception exc)                    {                        Logger.Trace(                            string.Format("Try to connect wcf service error:{0}, ExceptionType:{1}", endpointName,                                exc.GetType()), GetType(), exc);                        throw;                    }                    finally                    {                        try                        {                            (proxy as ICommunicationObject).Close();                        }                        catch                        {                            (proxy as ICommunicationObject).Abort();                        }                    }                }, 3);                return true;            }            catch (Exception exc)            {                PrintWholeException(exc);                return !IsHttpOrSocketException(exc);            }        }

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奇台县| 宁陵县| 广东省| 宁陕县| 铁岭县| 济宁市| 木兰县| 碌曲县| 邻水| 岑溪市| 县级市| 读书| 普定县| 常德市| 蓝山县| 鹤岗市| 那曲县| 铁岭市| 平原县| 时尚| 鲜城| 两当县| 建平县| 彭州市| 彭山县| 昆明市| 类乌齐县| 麻栗坡县| 乐东| 柘荣县| 金山区| 华容县| 赤城县| 江油市| 芜湖市| 佳木斯市| 扶绥县| 都江堰市| 石景山区| 兴义市| 兰溪市|