当 Web 服务所在的服务器不可用时,如何补救导致的 web.config 错误?

How to remedy the web.config error that results when a server is unavailable where a web service is located?

我有一个简单的 ASP.Net C# 应用程序,它从 Web 服务获取一些信息,然后将其显示在网页的 iframe 中。该应用程序大部分时间都运行良好,除非由于某种原因托管 Web 服务的服务器已关闭或不可用。请参考 web.config 片段和 Web 服务行 url。当 Web 服务服务器不可用时,该错误将突出显示 行。我尝试过各种方法,但不知道处理此问题的正确方法。谢谢你的帮助。

<configuration>
    <system.web>
  ::: ::: :::
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="WebServiceSoap" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://locaionOfWebService/WebService1.asmx"  
                binding="basicHttpBinding" bindingConfiguration="SampleWebServiceSoap"
                contract="ServiceReference1.WebServiceSoap" name="WebServiceSoap" />
        </client>
    </system.serviceModel>
</configuration>

代码;正在使用 basicHttpBinding。

var webservice = new OffSiteWebService.WSSoapClient("WSSoap1");    
var data = webservice.GetWebServiceInfo(parm1, parm2);

您可以通过多种方式处理此问题。

  1. 当您调用 Web 服务时,请查看响应的 StatusCode。这应该是 200 表示正常。如果该服务不可用,您可能会收到类似 404(未找到)的消息。如果您 post 您的服务调用代码,我可以提供更具体的答案。

  2. 您可以启动一个重试框架,它会根据您设置的策略不断尝试您的服务调用。看看 Polly 是一个不错的起点 - https://github.com/App-vNext/Polly

注意:StatusCodes 是特定于 HTTP 的,而不仅仅是与 ASP.NET 相关。看这里:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

幸运的是,导致该问题的网络服务今天在处理此问题时出现故障(它实际上是许多具有相同问题的类似网络服务之一)。在生产中,我们在应用程序 错误页面中收到 服务器错误,告诉您打开自定义错误,即使应用程序 web.config 确实打开了自定义错误并且定义了 4 个不同的错误页面。
错误页面显示:

我没有意识到的是,我们的应用程序与之交互的代理服务 也有它自己的 web.config 并且代理服务不包含任何错误处理它是代码或 web.cofig。只需在调用 Web 服务的代码中添加一个 try/catch 即可解决问题。

try {
    var webservice = new OffSiteWebService.WSSoapClient("WSSoap1");
    var data = webservice.GetWebServiceInfo(parm1, parm2);
    ::: ::: :::
    }
catch {
    return default values
    ::: ::: :::
    }

我可能还会添加一些额外的错误处理代码,但目前上述解决方案正在运行。