C#:如何以编程方式检查 Web 服务是不是已启动并正在运行?

     2023-04-12     14

关键词:

【中文标题】C#:如何以编程方式检查 Web 服务是不是已启动并正在运行?【英文标题】:C#: How to programmatically check a web service is up and running?C#:如何以编程方式检查 Web 服务是否已启动并正在运行? 【发布时间】:2012-08-19 02:38:50 【问题描述】:

我需要创建一个 C# 应用程序来监控一组 Web 服务是否启动并运行。用户将从下拉列表中选择服务名称。程序需要用对应的服务 URL 进行测试,并显示服务是否在运行。最好的方法是什么?我正在考虑的一种方法是测试我们是否能够下载 wsdl。有没有更好的办法?

注意:此应用程序的目的是用户只需要知道服务名称。他不需要记住/存储服务的相应 URL。

我需要此 C# 应用程序的网站版本和桌面应用程序版本。

注意:现有服务正在使用 WCF。但将来可能会添加非 WCF 服务。

注意:我的程序不会知道(或不感兴趣)服务中的操作。所以我不能调用服务操作。

参考

    How to check if a web service is up and running without using ping? C program-How do I check if a web service is running

【问题讨论】:

这些将被监控的服务是预先配置好的,对吧?我的意思是,这是一个通用的 Web 服务监控工具吗? 下载 WSDL 将验证 site 是否正在运行,但不会告诉您 Web 服务的依赖项(数据库、引用等)是否已关闭或丢失. 我通常会向我的服务添加一个Version 方法,该方法只从该服务返回一个“版本字符串”——如果它已启动并正在运行。但实际上:这并不能告诉你任何事情......你的调用现在 - 但不能保证一纳秒后它仍然可以工作......你只需要编程防御性并随时准备服务调用可能会失败或超时或其他任何事情...... “启动并运行”的定义是什么?一个 HTTP 200 状态代码很好地意味着后端数据库仍然崩溃。 我相信您可以禁用 WSDL 的下载,所以这可能不是最好的方法。如果我错了,请有人纠正我。 【参考方案1】:

这不能保证功能,但至少您可以检查与 URL 的连接:

var url = "http://url.to.che.ck/serviceEndpoint.svc";

try

    var myRequest = (HttpWebRequest)WebRequest.Create(url);

    var response = (HttpWebResponse)myRequest.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK)
    
        //  it's at least in some way responsive
        //  but may be internally broken
        //  as you could find out if you called one of the methods for real
        Debug.Write(string.Format("0 Available", url));
    
    else
    
        //  well, at least it returned...
        Debug.Write(string.Format("0 Returned, but with status: 1", 
            url, response.StatusDescription));
    

catch (Exception ex)

    //  not available at all, for some reason
    Debug.Write(string.Format("0 unavailable: 1", url, ex.Message));

【讨论】:

还有其他方法可以检查进程是否启动并运行?我正在尝试您的建议 GetResponse() 方法,但它需要更多时间.. 这是我获取服务 uri 的方式:var url = ServiceClient().Endpoint.Address.Uri;【参考方案2】:

我可能回答得太晚了,但这种方法对我有用。 我使用 Socket 来检查进程是否可以连接。 如果您尝试检查连接 1-3 次,则 HttpWebRequest 有效,但如果您有一个将运行 24 小时的进程并且不时需要检查将不再工作的网络服务器可用性,因为会抛出 TimeOut 异常。

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                var result = socket.BeginConnect("xxx.com", 80, null, null);
                bool success = result.AsyncWaitHandle.WaitOne(3000,false); // test the connection for 3 seconds
                var resturnVal = socket.Connected;
                if (socket.Connected)
                    socket.Disconnect(true);
                socket.Dispose();
                return resturnVal;

【讨论】:

我将此答案用于我的解决方案,效果很好且简洁。然而,由于 Socket 是一次性的,我将整个代码块包装在一个 using 块中。即:using(Socket socket = new Socket(...)) ...

在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

】在C#中以编程方式检查字符串是不是包含有效的C#代码【英文标题】:CheckifastringcontainsvalidC#codeprogramaticallyinC#在C#中以编程方式检查字符串是否包含有效的C#代码【发布时间】:2021-10-3019:37:25【问题描述】:我有一个包含C#代码... 查看详情

如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用

】如何在C#中以编程方式将Windows服务的启动类型更改为禁用【英文标题】:HowtochangethestartuptypeofWindowsservicetoDisabledprogrammaticallyinC#【发布时间】:2020-08-2817:36:51【问题描述】:您好,我正在尝试更改现有Windows服务的启动类型。说... 查看详情

如何以编程方式检查 Photoshop 画笔是不是存在

】如何以编程方式检查Photoshop画笔是不是存在【英文标题】:Howcheckifphotoshopbrushexistprogrammatically如何以编程方式检查Photoshop画笔是否存在【发布时间】:2021-01-1313:55:54【问题描述】:我正在尝试为某些动作创建一个Photoshop面板,... 查看详情

如何以编程方式检查 Windows 是不是是最新的?

】如何以编程方式检查Windows是不是是最新的?【英文标题】:Howtocheckprogrammaticallyifwindowsisup-to-date?如何以编程方式检查Windows是否是最新的?【发布时间】:2012-01-0402:25:10【问题描述】:我正在使用Windows窗体在c#中构建一个应用... 查看详情

以编程方式检查 Windows 7 是不是已激活

】以编程方式检查Windows7是不是已激活【英文标题】:ProgrammaticallycheckwhetherWindows7isactivated以编程方式检查Windows7是否已激活【发布时间】:2011-08-1701:48:00【问题描述】:背景:我正在创建将加载到多个工作站上的系统映像。将图... 查看详情

以编程方式检查 Windows 是不是已使用 C++ 激活

】以编程方式检查Windows是不是已使用C++激活【英文标题】:ProgrammaticallyCheckifWindowsisActivatedwithC++以编程方式检查Windows是否已使用C++激活【发布时间】:2017-09-1423:07:47【问题描述】:我正在尝试编写一个C++函数,它会告诉用户他... 查看详情

如何在 C# 中以编程方式安装 Windows 服务?

】如何在C#中以编程方式安装Windows服务?【英文标题】:HowtoinstallawindowsserviceprogrammaticallyinC#?【发布时间】:2010-09-2609:36:18【问题描述】:我的VS解决方案中有3个项目。其中一个是Web应用程序,第二个是Windows服务,最后一个是... 查看详情

如何以编程方式检查 Android 中是不是安装了应用程序?

】如何以编程方式检查Android中是不是安装了应用程序?【英文标题】:HowtocheckprogrammaticallyifanapplicationisinstalledornotinAndroid?如何以编程方式检查Android中是否安装了应用程序?【发布时间】:2012-07-0816:22:21【问题描述】:我们以编... 查看详情

如何在调用之前检查 Java Web 服务是不是已在 PL/SQL 中启动并运行

】如何在调用之前检查JavaWeb服务是不是已在PL/SQL中启动并运行【英文标题】:HowtoCheckifajavawebserviceisupandrunninginPL/SQLbeforecallingit如何在调用之前检查JavaWeb服务是否已在PL/SQL中启动并运行【发布时间】:2015-09-2918:23:32【问题描述】... 查看详情

如何在 C# 中获取已注册 COM 服务器的路径?

】如何在C#中获取已注册COM服务器的路径?【英文标题】:HowdoIgetthepathofaregisteredCOMserverinC#?【发布时间】:2016-07-2209:03:53【问题描述】:有没有一种很好的方法可以在C#中以编程方式获取已注册COM服务器的路径?我们有一个在C#... 查看详情

如何以编程方式判断蓝牙设备是不是已连接?

】如何以编程方式判断蓝牙设备是不是已连接?【英文标题】:HowcanIprogrammaticallytellifaBluetoothdeviceisconnected?如何以编程方式判断蓝牙设备是否已连接?【发布时间】:2011-01-1717:13:45【问题描述】:我了解如何获取已配对设备的列... 查看详情

如何以编程方式检查视频或音频文件格式是不是可以在 iPhone 中播放?

】如何以编程方式检查视频或音频文件格式是不是可以在iPhone中播放?【英文标题】:HowtocheckwhetheravideooraudiofileformatisplayableiniPhoneprogrammatically?如何以编程方式检查视频或音频文件格式是否可以在iPhone中播放?【发布时间】:201... 查看详情

macOS:以编程方式检查进程是不是作为启动守护进程或启动代理运行或从命令行运行

】macOS:以编程方式检查进程是不是作为启动守护进程或启动代理运行或从命令行运行【英文标题】:macOS:programmaticcheckifprocessrunsasalaunchDaemonorlaunchAgentorfromcommand-linemacOS:以编程方式检查进程是否作为启动守护进程或启动代理运... 查看详情

如何以编程方式检查行是不是可删除?

】如何以编程方式检查行是不是可删除?【英文标题】:Howtoprogrammaticallycheckifrowisdeletable?如何以编程方式检查行是否可删除?【发布时间】:2013-10-2319:40:53【问题描述】:假设我们有一个像这样的PostgreSQL表:CREATETABLEmaster(idINTPR... 查看详情

如何以编程方式检查大写锁定是不是打开

】如何以编程方式检查大写锁定是不是打开【英文标题】:Howtoprogrammaticallycheckifcapslockison如何以编程方式检查大写锁定是否打开【发布时间】:2014-10-2306:47:51【问题描述】:我有一个IntermecCK70设备,是否可以通过编程方式检查... 查看详情

如何以编程方式确定我是不是具有在 .Net 中使用 C# 的写入权限?

】如何以编程方式确定我是不是具有在.Net中使用C#的写入权限?【英文标题】:HowcanIprogrammaticallydetermineifIhavewriteprivilegesusingC#in.Net?如何以编程方式确定我是否具有在.Net中使用C#的写入权限?【发布时间】:2010-09-1307:34:26【问题... 查看详情

以编程方式检测“让 Google 应用访问您的位置”是不是已禁用

】以编程方式检测“让Google应用访问您的位置”是不是已禁用【英文标题】:Detectprogrammaticallyif"LetGoogleappsaccessyourlocation"disabled以编程方式检测“让Google应用访问您的位置”是否已禁用【发布时间】:2014-05-2918:30:48【问题... 查看详情

如何以编程方式检查设备是不是在 iOS 中设置振动模式?

】如何以编程方式检查设备是不是在iOS中设置振动模式?【英文标题】:HowtocheckwhetherdevicesetvibrationmodeornotiniOSprogramatically?如何以编程方式检查设备是否在iOS中设置振动模式?【发布时间】:2016-04-2007:28:28【问题描述】:我正在... 查看详情