【问题标题】:How to remedy the web.config error that results when a server is unavailable where a web service is located?如何解决当 Web 服务所在的服务器不可用时导致的 web.config 错误?
【发布时间】:2021-01-13 16:23:33
【问题描述】:

我有一个简单的 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);

【问题讨论】:

  • 请添加您用于调用服务的代码示例。这将有助于您得到回复。
  • 我怀疑调用 Web 服务的代码需要随所使用的绑定一起更改。但是当前实际进行调用的代码工作正常,除非远程服务器关闭/不可用。当远程服务器关闭时,web.config 文件本身会收到错误,而不是调用 web 服务的代码。此外,我尝试的第一件事是向服务器创建一个get request,并且只有在响应代码为 200 OK 时才调用 Web 服务。这时我意识到是 web.config 文件本身出现错误,因为它无法配置 Web 服务端点。
  • 注意:正在使用 basicHttpBinding。 var webservice = new OffSiteWebService.WSSoapClient("WSSoap1"); var data = webservice.GetWebServiceInfo(parm1, parm2);
  • 请将附加信息添加到您的问题中,以便您执行所有步骤。

标签: asp.net web-services web-config


【解决方案1】:

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

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

  2. 您可以实施重试框架,该框架将根据您设置的策略继续尝试您的服务调用。看看 Polly 是一个不错的起点 - https://github.com/App-vNext/Polly

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

【讨论】:

  • 感谢您的回复。这实际上是我尝试的第一件事。我向服务器发出了一个获取请求,并且只有在响应代码为 200 OK 时才调用 Web 服务。 这是我意识到是 web.config 文件本身出现错误的时候。 注意:正在使用 basicHttpBinding。
  • web.config 文件不运行代码。它是一个静态文件,用于保存应用程序使用的可变数据。也就是说,您能否进一步描述“出现错误的 web.config 文件”是什么意思。您看到什么症状或错误消息?能否提供错误截图?
【解决方案2】:

幸运的是,导致该问题的 Web 服务今天在处理此问题时已关闭(它实际上是具有相同问题的许多类似 Web 服务之一)。在生产中,我们会收到 Server error in Application 错误页面,告诉您打开 customErrors,即使应用程序的web.config 确实有 customErrors ON 并定义了 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
    ::: ::: :::
    }

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

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2019-12-22
    • 2015-11-25
    • 1970-01-01
    • 2021-12-01
    • 2013-02-03
    相关资源
    最近更新 更多