0

My Blazor Webassembly ASP.NET Core 6.0 hosted app is published to IIS 10.0 (Windows 10). It has api calls to SQL Server. I can't get my collection (List<string>) populated from SQL server and Web Browser shows error:

fail: MyBlazorWebbAssemblyApp.Client.Pages.RedirectedAppeal.MyClientPage[0]
ExpectedJsonTokens Path: $ | LineNumber: 0 | BytePositionInLine: 0. :StackTrace:    at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& , JsonReaderException )
         at System.Text.Json.Serialization.JsonConverter`1[[System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ReadCore(Utf8JsonReader& , JsonSerializerOptions , ReadStack& )
         at System.Text.Json.JsonSerializer.ReadCore[List`1](JsonConverter , Utf8JsonReader& , JsonSerializerOptions , ReadStack& )
         at System.Text.Json.JsonSerializer.ReadCore[List`1](JsonReaderState& , Boolean , ReadOnlySpan`1 , JsonSerializerOptions , ReadStack& , JsonConverter )
         at System.Text.Json.JsonSerializer.ContinueDeserialize[List`1](ReadBufferState& , JsonReaderState& , ReadStack& , JsonConverter , JsonSerializerOptions )
         at System.Text.Json.JsonSerializer.<ReadAllAsync>d__65`1[[System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
         at System.Net.Http.Json.HttpContentJsonExtensions.<ReadFromJsonAsyncCore>d__4`1[[System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
         at WorkGroupProsecutor.Client.Pages.RedirectedAppeal.RedirectedPage.OnInitializedAsync() :#: System.Text.Json.JsonReaderException: ExpectedJsonTokens LineNumber: 0 | BytePositionInLine: 0.
         at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& , ExceptionResource , Byte , ReadOnlySpan`1 )
         at System.Text.Json.Utf8JsonReader.Read()
         at System.Text.Json.Serialization.JsonConverter`1[[System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ReadCore(Utf8JsonReader& , JsonSerializerOptions , ReadStack& )

I don't get this error when it runs in visual studio ! Or even if I run my published app on kestrel like so: dotnet myapp.dll Unfortunatelly i have to publish it to IIS.

The call chain:

Clients Page:

@inject HttpClient httpClient
@inject ILogger<MyClientPage> logger

@foreach (var period in periodsList) @*Some UI element where my List is shown:*@
{
   ...             
}

@code{
private List<string> periodsList = new();
protected override async Task OnInitializedAsync() //Where i get my error:
{
try
{
   periodsList = await httpClient.GetFromJsonAsync<List<string>>($"api/RedirectedAppeal/{"Az"}/{2022}");
}
catch(Exception ex)
{ logger.LogError($"{ex.Message} :StackTrace: {ex.StackTrace}" }
}

I also tryied rephrase the List population like this:

protected override async Task OnInitializedAsync() //Where i get my error:
{
   var periods = await httpClient.GetAsync($"api/RedirectedAppeal/{"Az"}/{2022}");
   periodsList = await periods.Content.ReadFromJsonAsync<List<string>>();
}

but got the same error :(

and like this:

periodsList = await JsonSerializer.DeserializeAsync<List<string>>(await httpClient.GetStreamAsync($"api/RedirectedAppeal/{"Az"}/{2022}"));

got me this error:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: net_http_message_not_success_statuscode, 500, Internal Server Error
System.Net.Http.HttpRequestException: net_http_message_not_success_statuscode, 500, Internal Server Error
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.Json.HttpClientJsonExtensions.<GetFromJsonAsyncCore>d__13`1[[System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at BzrIIStest.Client.Pages.CatNamesPage.OnInitializedAsync()
   at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task , ComponentState )

Controller (RedirectedAppealController.cs):

[HttpGet("{district}/{year}")]
public async Task<IEnumerable<string>> Get(string district, int year)
{
   return await _appealRepository.GetRedirectedAppealPeriods(district, year);
}

Repository (AppealRepository.cs):

public async Task<IEnumerable<string>> GetRedirectedAppealPeriods(string district, int year)
{
    return await _dbContext.RedirectedAppeal
        .Where(a => a.District == district)
        .Where(a => a.YearInfo == year).Select(p => p.PeriodInfo).Distinct().ToListAsync(); 
}

Calls made in Swagger also return 500 Error: Internal Server Error

Response headers
 date: Tue,13 Dec 2022 10:02:00 GMT 
 server: Microsoft-IIS/10.0 
 transfer-encoding: chunked 
 x-powered-by: ASP.NET 

I tried:

I tried to use windows authentication and adding login and user to SQL Server (accordingly using connection string with Integrated Security=True and with User id and password)

I tried to twiggle IIS (.Net CLR Version - No Managed Code) by giving access in my SQL Server to it's App Pool

I have no firewall or port access issues.

Tried using GetFromJsonAsync and ReadFromJsonAsync as i mentioned above

periodsList = await httpClient.GetFromJsonAsync<List<string>>($"api/RedirectedAppeal/{"Az"}/{2022}");

vs

var periods = await httpClient.GetAsync($"api/RedirectedAppeal/{"Az"}/{2022}");
periodsList = await periods.Content.ReadFromJsonAsync<List<string>>();

vs

periodsList = await JsonSerializer.DeserializeAsync<List<string>>(await httpClient.GetStreamAsync($"api/RedirectedAppeal/{"Az"}/{2022}"));

In the controller i tried to wrap calls in IActionResult with Ok like so:

[HttpGet("{district}/{year}")]
public async Task<IActionResult> Get(string district, int year)
{
    return Ok(await _appealRepository.GetRedirectedAppealPeriods(district, year));
}

I also tryed to do it synchronously (even though HttpClient not a big fan of it >.<)

And i tried to use different browsers of course! No success :(

To reproduce the problem

I created simplified and cute :3 project to anyone who's willing to try it out - 1 table with 1 string field. Works perfectly on kestrel and wile running on express version vie Visual studio. All i'm trying to do is to make it work in a published IIS project. Migrations to generate DB via EF are included: Sample Project to recreate error

I have added Failed Request Tracing Rules, it doesn't show much unfortunatelly:

ModuleName="AspNetCoreModuleV2", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The operation completed successfully.
 (0x0)", ConfigExceptionInfo=""

Any ideas? Thank you all in advance!

PaxV
  • 1
  • 1
  • It is difficult to reproduce your problem based on your description, you need more information to analyze this error, you can try using [failed request tracing](https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules) to view detailed request information, this will generate detail log file, which will help you to identify the problem. – samwu Dec 14 '22 at 08:02
  • I have added Failed Request Tracing Rules, but unfortunately the only place where it shows error (worning) not that informative. I'm gonna include it in the end of my question – PaxV Dec 16 '22 at 13:16
  • Have you checked the Request Details in the failed request trace log? Here is the full request process. and you can also check whether there are related error messages in the Event viewer. – samwu Dec 19 '22 at 07:29
  • Yes, and adding errorMode="Detailed" to web.config still didn't give me much: IIS Request Details: "ModuleName="AspNetCoreModuleV2", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo="" – PaxV Dec 23 '22 at 13:22
  • I suggest you open a case via: https://support.microsoft.com, microsoft engineer will help find the root cause. – samwu Dec 26 '22 at 05:52

0 Answers0