【发布时间】:2022-01-05 15:07:21
【问题描述】:
之前我的 WebApplication 在 .Net Framework 4.5.2 上工作。升级到 4.8 后,应用程序间歇性地在 jsonp 响应中附加一个奇怪的 HTML 错误。 API 中没有记录错误。 jquery 每次都从 WCF WebAPI 接收状态为 200 的 json 响应。我们在 WCF 中有自定义 Web API,它们在从 Google API 获取数据后给出 json 响应。
$.ajax({
type: 'GET',
url: GoogleDataSourceServiceUrl,
async: false,
crossDomain: true,
timeout: 90000,
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'jsonCallbackgoogle',
beforeSend: function () {
$("#GooglePreLoader").show();
$('#GoogleResults').html("");
},
success: function (data) {
processGoogleRes(data);
$("#hidden_google_id").val(0);
$(".pagination a").on("contextmenu",function(){
return false;
});
},
error: function (x, t, m) {
if (t === "timeout") {
$("#GooglePreLoader").hide();
$('#GoogleResults').append("Request Timeout");
}
else if (t === "parsererror") {
$("#GooglePreLoader").hide();
$('#GoogleResults').append("Unable to contact App");
}
$("#hidden_google_id").val(0);
}
});
间歇性错误响应如下:
jsonCallbackgoogle("{\"results\":[{\"title\":\" ...., ...\"}],\"_total\":33}");
<!DOCTYPE html>
<html>
<head>
<title>Runtime Error</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:pointer; }
@media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
@media screen and (max-width: 479px) {
pre { width: 280px; }
}
</style>
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
<br><br>
<b>Details:</b> To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".<br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration></pre> </code>
</td>
</tr>
</table>
<br>
<b>Notes:</b> The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.<br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration></pre> </code>
</td>
</tr>
</table>
<br>
</font>
</body>
</html>
我在 WCF WebAPI 或 Asp.Net Web 应用程序中都没有看到任何错误。
这是我的 WCF 服务配置:
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxSizeOfMessageToLog="134217728"/>
</diagnostics>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="WcfOcRestService.OcService">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="webHttpsBindingWithJsonP" contract="WcfOcRestService.IOcService"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpsGetEnabled="True" policyVersion="Policy12"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
<webHttp helpEnabled="True" automaticFormatSelectionEnabled="True"/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="webHttpsBindingWithJsonP" crossDomainScriptAccessEnabled="true" transferMode="Streamed">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
【问题讨论】:
标签: jquery asp.net wcf jsonp webapi