MMLib.SwaggerForOcelot icon indicating copy to clipboard operation
MMLib.SwaggerForOcelot copied to clipboard

getting error when use service discovery

Open alihmaidi1 opened this issue 2 years ago • 5 comments

Describe the bug

 Start processing HTTP request GET localhost:5226/swagger/teacher/swagger.json
info: System.Net.Http.HttpClient.Default.ClientHandler[100]
      Sending HTTP request GET localhost:5226/swagger/teacher/swagger.json
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
      System.NotSupportedException: The 'localhost' scheme is not supported.
         at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.<SendCoreAsync>g__Core|5_0(HttpRequestMessage request, Boolean useAsync, CancellationToken cancellationToken)
         at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.<SendCoreAsync>g__Core|5_0(HttpRequestMessage request, Boolean useAsync, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
         at MMLib.SwaggerForOcelot.Repositories.DownstreamSwaggerDocsRepository.GetSwaggerJsonAsync(RouteOptions route, SwaggerEndPointOptions endPoint, String docsVersion)
         at MMLib.SwaggerForOcelot.Middleware.SwaggerForOcelotMiddleware.Invoke(HttpContext context, ISwaggerEndPointProvider swaggerEndPointRepository, IDownstreamSwaggerDocsRepository downstreamSwaggerDocs)
         at Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.InvokeCore(HttpContext context, PathString matchedPath, PathString remainingPath)
         at Microsoft.AspNetCore.MiddlewareAnalysis.AnalysisMiddleware.Invoke(HttpContext httpContext)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.MiddlewareAnalysis.AnalysisMiddleware.Invoke(HttpContext httpContext)
         at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.MiddlewareAnalysis.AnalysisMiddleware.Invoke(HttpContext httpContext)
         at Microsoft.AspNetCore.MiddlewareAnalysis.AnalysisMiddleware.Invoke(HttpContext httpContext)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
^Cinfo: Microsoft.Hosting.Lifetime[0]
      Application is shutting down...

i try to use service discovery but i get this error


{

  "SwaggerEndPoints": [
    {

      "Key": "Teacher",
      "Config": [{

        "Name": "Teacher Documentation microservice",
        "Version": "v1",
        "UseServiceDiscovery": true,
        "Service": {
          "Scheme": "http",
          "Name": "Teacher",
          "Path": "/swagger/teacher/swagger.json"
        }

      }]
    }
  ]
}

this is my SwaggerEndPoints


{


  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:5297",
    "ServiceDiscoveryProvider": {
      "Scheme": "http",
      "Host": "localhost",
      "Port": 8500,      
      "Type": "Consul",
      "PollingInterval": 1000
      
    }
    
    
  }
}

this is GlobalConfiguration

now after search i find you need to add schema when get swagger by service registry

alihmaidi1 avatar Feb 05 '24 14:02 alihmaidi1

Hi,

please can you provide a demo example with minimal reproduction steps?

Burgyn avatar Feb 05 '24 14:02 Burgyn

yes here is my repo you can check it @Burgyn https://github.com/alihmaidi1/schoolMicroservice

alihmaidi1 avatar Feb 05 '24 15:02 alihmaidi1

{
  "SwaggerEndPoints": [
    {

      "Key": "Teacher",
      "Config": [{

        "Name": "Teacher Documentation microservice",
        "Version": "v1",
        "UseServiceDiscovery": true,
        "Url":"http://localhost:5226/swagger/teacher/swager.json" //this will work 
        

     "Service": {
          "Scheme": "http",
          "Name": "Teacher",
          "Path": "/swagger/teacher/swagger.json"
        }
// This not work with me because this package  make url  "localhost:5226/swagger/teacher/swagger.json"
Without http This make error

@Burgyn

alihmaidi1 avatar Feb 05 '24 16:02 alihmaidi1

Hi @alihmaidi1,

can you please provide a working project? Ideally without database dependency (note in your example you have published a secret) and with Consul service discovery configured? I don't know Consul, so I don't plan to learn it and figure out how to configure it. Ideally if you provide it as a docker-compose let me know how to download it and run/debug it.

Otherwise, unfortunately I don't have the space to devote to it. Thank you for your understanding.

Burgyn avatar Feb 06 '24 19:02 Burgyn

Yes, you can view the project. I have prepared for you a docker-compose file and I have also prepared for you two services, the first for admin and it getting swagger by 'url' and it work and the second getting swagger by 'Service' and it don't work

https://github.com/alihmaidi1/schoolMicroservice

@Burgyn

alihmaidi1 avatar Feb 07 '24 11:02 alihmaidi1

Hi, @alihmaidi1 Support for Consul Service discovery was added yesterday

raga70 avatar Mar 27 '24 20:03 raga70

thank you man :)

alihmaidi1 avatar Mar 28 '24 09:03 alihmaidi1