当 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);
您可以通过多种方式处理此问题。
当您调用 Web 服务时,请查看响应的 StatusCode。这应该是 200 表示正常。如果该服务不可用,您可能会收到类似 404(未找到)的消息。如果您 post 您的服务调用代码,我可以提供更具体的答案。
您可以启动一个重试框架,它会根据您设置的策略不断尝试您的服务调用。看看 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
::: ::: :::
}
我可能还会添加一些额外的错误处理代码,但目前上述解决方案正在运行。
我有一个简单的 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 服务时,请查看响应的 StatusCode。这应该是 200 表示正常。如果该服务不可用,您可能会收到类似 404(未找到)的消息。如果您 post 您的服务调用代码,我可以提供更具体的答案。
您可以启动一个重试框架,它会根据您设置的策略不断尝试您的服务调用。看看 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
::: ::: :::
}
我可能还会添加一些额外的错误处理代码,但目前上述解决方案正在运行。