-1

Earlier my WebApplication was working on .Net Framework 4.5.2. After upgrading to 4.8, the Application is intermittently giving a weird HTML error appended to the jsonp response. There is no error logged in the API. The jquery is receiving json response from WCF WebAPIs every time with status 200. We have custom Web APIs in WCF that give json response after fetching data from Google APIs.

$.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);
        
    }
});

The intermittent error response is like below:

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 &lt;customErrors&gt; tag within a &quot;web.config&quot; configuration file located in the root directory of the current web application. This &lt;customErrors&gt; tag should then have its &quot;mode&quot; attribute set to &quot;Off&quot;.<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config Configuration File --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;Off&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</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 &quot;defaultRedirect&quot; attribute of the application&#39;s &lt;customErrors&gt; configuration tag to point to a custom error page URL.<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config Configuration File --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;RemoteOnly&quot; defaultRedirect=&quot;mycustompage.htm&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</pre>                      </code>

                  </td>
               </tr>
            </table>

            <br>

            </font>

    </body>
</html>


I don't see any errors in neither the WCF WebAPI or the Asp.Net Web Application.

Here is my WCF Service Configuration:

<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>

1 Answers1

0

In the web.config file of the WCF project, make sure you have the attribute crossDomainScriptAccessEnabled="true", you can also try to find the solution in the following post.

<webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding> 

jQuery $.ajax call for cross domain with JSONP, returns status 200, but error function is being called instead of success

Consuming a WCF Service in jQuery via AJAX Call in a different Project (Cross Domain)

jQuery ajax (jsonp) ignores a timeout and doesn't fire the error event

Lan Huang
  • 613
  • 2
  • 5