Activities of "consultant.ahmet.ulusoy"

Hi Enis,

I'll try this and let you know about progress in a few days.

Thank you

Hi Berkan,

If you hava a time, i'll be really happy. Because it's very important for us.

Hi Enis,

How can I sure about if AbpAuthorizationService works on your gRPC request?

I tried with below way but could not authenticate

public virtual async Task<TrevaProfileDto> TrevaGetProfileAsync(string accessToken)
{
    var credentials = CallCredentials.FromInterceptor((context, metadata) =>
    {
        metadata.Add("Authorization", accessToken);
        return Task.CompletedTask;
    });

    if (CurrentTenant.IsAvailable)
    {
        credentials = CallCredentials.FromInterceptor((context, metadata) =>
        {
            metadata.Add("__tenant", CurrentTenant.Name!);
            metadata.Add("Authorization", accessToken);
            return Task.CompletedTask;
        });
    }

    var grpcProfileUrl = _configuration["GrpcEndpoints:ProfileUrl"]!;

    if (string.IsNullOrWhiteSpace(grpcProfileUrl))
    {
        throw new BusinessException(message: L["GrpcEndpointCanNotBeNull", nameof(grpcProfileUrl)]);
    }

    using var channel = GrpcChannel.ForAddress(grpcProfileUrl, new GrpcChannelOptions
    {
        UnsafeUseInsecureChannelCallCredentials = true,
        HttpHandler = new GrpcWebHandler(new HttpClientHandler()),
        Credentials = ChannelCredentials.Create(ChannelCredentials.Insecure, credentials)
    });
    var trevaProfileAppService = channel.CreateGrpcService<ITrevaProfileAppService>();

    var trevaProfileInput = new TrevaProfileInputDto
    {
        UserId = CurrentUser.Id!.Value,
        TenantId = CurrentTenant.Id
    };
    var trevaProfileDto = await trevaProfileAppService.GetAsync(trevaProfileInput);

    return trevaProfileDto;
}

it gives below exception

Status(StatusCode="Unknown", Detail="Exception was thrown by handler. AbpAuthorizationException: Exception of type 'Volo.Abp.Authorization.AbpAuthorizationException' was thrown.")

I figured out the problem. Reflection package also need for grpc. Now, I can access the services and methods.

Now, i need to send accessToken to the grpc endpoint because it's authorized.

Is there any working sample for that?

When application starts it gives below warnings [14:37:29 DBG] Could not find bind method for Services.TrevaProfiles.ITrevaProfileAppService. [14:37:32 WRN] Signature not recognized for Services.TrevaProfiles.ITrevaProfileAppService.GetAsync; method will not be bound [14:37:32 DBG] No gRPC methods discovered for Services.TrevaProfiles.ITrevaProfileAppService. [14:37:32 INF] Initialized all ABP modules. [14:37:32 WRN] Overriding address(es) 'http://localhost:44360, http://localhost:44361'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead. [14:37:32 WRN] HTTP/2 is not enabled for 127.0.0.1:44360. The endpoint is configured to use HTTP/1.1 and HTTP/2, but TLS is not enabled. HTTP/2 requires TLS application protocol negotiation. Connections to this endpoint will use HTTP/1.1. [14:37:32 WRN] HTTP/2 is not enabled for [::1]:44360. The endpoint is configured to use HTTP/1.1 and HTTP/2, but TLS is not enabled. HTTP/2 requires TLS application protocol negotiation. Connections to this endpoint will use HTTP/1.1.

appsettings.json:

{
  "App": {
    "CorsOrigins": "http://localhost:4200,http://localhost:44381,http://localhost:44380"
  },
  "AuthServer": {
    "SwaggerClientId": "SwaggerTestUI"
  },
  "ElasticSearch": {
    "IsLoggingEnabled": true,
    "Url": "http://localhost:9200"
  },
  "Swagger": {
    "IsEnabled": true
  },
  "ReverseProxy": {
    "Routes": {
      "AbpApi": {
        "ClusterId": "Administration",
        "Match": {
          "Path": "/api/abp/{**catch-all}"
        }
      },
      "AdministrationSwagger": {
        "ClusterId": "Administration",
        "Match": {
          "Path": "/swagger-json/Administration/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Administration"
          }
        ]
      },
      "Account": {
        "ClusterId": "AuthServer",
        "Match": {
          "Path": "/api/account/{**catch-all}"
        }
      },
      "AuthServerSwagger": {
        "ClusterId": "AuthServer",
        "Match": {
          "Path": "/swagger-json/AuthServer/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/AuthServer"
          }
        ]
      },
      "Gdpr": {
        "ClusterId": "Gdpr",
        "Match": {
          "Path": "/api/gdpr/{**catch-all}"
        }
      },
      "GdprSwagger": {
        "ClusterId": "Gdpr",
        "Match": {
          "Path": "/swagger-json/Gdpr/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Gdpr"
          }
        ]
      },
      "Language": {
        "ClusterId": "Language",
        "Match": {
          "Path": "/api/language-management/{**catch-all}"
        }
      },
      "LanguageSwagger": {
        "ClusterId": "Language",
        "Match": {
          "Path": "/swagger-json/Language/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Language"
          }
        ]
      },
      "Chat": {
        "ClusterId": "Chat",
        "Match": {
          "Path": "/api/chat/{**catch-all}"
        }
      },
      "ChatSwagger": {
        "ClusterId": "Chat",
        "Match": {
          "Path": "/swagger-json/Chat/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Chat"
          }
        ]
      },
      "CmsKit": {
        "ClusterId": "ContentManagement",
        "Match": {
          "Path": "/api/cms-kit/{**catch-all}"
        }
      },
      "CmsKitPublic": {
        "ClusterId": "ContentManagement",
        "Match": {
          "Path": "/api/cms-kit-public/{**catch-all}"
        }
      },
      "ContentManagement": {
        "ClusterId": "ContentManagement",
        "Match": {
          "Path": "/api/contentmanagement/{**catch-all}"
        }
      },
      "ContentManagementSwagger": {
        "ClusterId": "ContentManagement",
        "Match": {
          "Path": "/swagger-json/ContentManagement/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/ContentManagement"
          }
        ]
      },
      "DocumentManagement": {
        "ClusterId": "DocumentManagement",
        "Match": {
          "Path": "/api/documentmanagement/{**catch-all}"
        }
      },
      "DocumentManagementSwagger": {
        "ClusterId": "DocumentManagement",
        "Match": {
          "Path": "/swagger-json/DocumentManagement/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/DocumentManagement"
          }
        ]
      },
      "Forms": {
        "ClusterId": "FormManagement",
        "Match": {
          "Path": "/api/forms/{**catch-all}"
        }
      },
      "Questions": {
        "ClusterId": "FormManagement",
        "Match": {
          "Path": "/api/questions/{**catch-all}"
        }
      },
      "Responses": {
        "ClusterId": "FormManagement",
        "Match": {
          "Path": "/api/responses/{**catch-all}"
        }
      },
      "FormManagement": {
        "ClusterId": "FormManagement",
        "Match": {
          "Path": "/api/formmanagement/{**catch-all}"
        }
      },
      "FormManagementSwagger": {
        "ClusterId": "FormManagement",
        "Match": {
          "Path": "/swagger-json/FormManagement/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/FormManagement"
          }
        ]
      },
      "Email": {
        "ClusterId": "Email",
        "Match": {
          "Path": "/api/email/{**catch-all}"
        }
      },
      "EmailSwagger": {
        "ClusterId": "Email",
        "Match": {
          "Path": "/swagger-json/Email/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Email"
          }
        ]
      },
      "Sms": {
        "ClusterId": "Sms",
        "Match": {
          "Path": "/api/sms/{**catch-all}"
        }
      },
      "SmsSwagger": {
        "ClusterId": "Sms",
        "Match": {
          "Path": "/swagger-json/Sms/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Sms"
          }
        ]
      },
      "Notification": {
        "ClusterId": "Notification",
        "Match": {
          "Path": "/api/notification/{**catch-all}"
        }
      },
      "NotificationSwagger": {
        "ClusterId": "Notification",
        "Match": {
          "Path": "/swagger-json/Notification/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Notification"
          }
        ]
      },
      "Demo": {
        "ClusterId": "Demo",
        "Match": {
          "Path": "/api/demo/{**catch-all}"
        }
      },
      "DemoSwagger": {
        "ClusterId": "Demo",
        "Match": {
          "Path": "/swagger-json/Demo/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Demo"
          }
        ]
      },
      "FastTrack": {
        "ClusterId": "FastTrack",
        "Match": {
          "Path": "/api/fasttrack/{**catch-all}"
        }
      },
      "FastTrackSwagger": {
        "ClusterId": "FastTrack",
        "Match": {
          "Path": "/swagger-json/FastTrack/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/FastTrack"
          }
        ]
      },
      "Lounge": {
        "ClusterId": "Lounge",
        "Match": {
          "Path": "/api/lounge/{**catch-all}"
        }
      },
      "LoungeSwagger": {
        "ClusterId": "Lounge",
        "Match": {
          "Path": "/swagger-json/Lounge/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Lounge"
          }
        ]
      },
      "Atu": {
        "ClusterId": "Atu",
        "Match": {
          "Path": "/api/atu/{**catch-all}"
        }
      },
      "AtuSwagger": {
        "ClusterId": "Atu",
        "Match": {
          "Path": "/swagger-json/Atu/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Atu"
          }
        ]
      },
      "DutyFree": {
        "ClusterId": "DutyFree",
        "Match": {
          "Path": "/api/dutyfree/{**catch-all}"
        }
      },
      "DutyFreeSwagger": {
        "ClusterId": "DutyFree",
        "Match": {
          "Path": "/swagger-json/DutyFree/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/DutyFree"
          }
        ]
      },
      "Setting": {
        "ClusterId": "Setting",
        "Match": {
          "Path": "/api/setting/{**catch-all}"
        }
      },
      "SettingSwagger": {
        "ClusterId": "Setting",
        "Match": {
          "Path": "/swagger-json/Setting/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Setting"
          }
        ]
      },
      "Yolcu360": {
        "ClusterId": "Yolcu360",
        "Match": {
          "Path": "/api/yolcu360/{**catch-all}"
        }
      },
      "Yolcu360Swagger": {
        "ClusterId": "Yolcu360",
        "Match": {
          "Path": "/swagger-json/Yolcu360/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Yolcu360"
          }
        ]
      },
      "Order": {
        "ClusterId": "Order",
        "Match": {
          "Path": "/api/order/{**catch-all}"
        }
      },
      "OrderSwagger": {
        "ClusterId": "Order",
        "Match": {
          "Path": "/swagger-json/Order/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Order"
          }
        ]
      },
      "Profile": {
        "ClusterId": "Profile",
        "Match": {
          "Path": "/api/profile/{**catch-all}"
        }
      },
      "ProfileSwagger": {
        "ClusterId": "Profile",
        "Match": {
          "Path": "/swagger-json/Profile/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Profile"
          }
        ]
      },
      "Payment": {
        "ClusterId": "Payment",
        "Match": {
          "Path": "/api/payment/{**catch-all}"
        }
      },
      "PaymentSwagger": {
        "ClusterId": "Payment",
        "Match": {
          "Path": "/swagger-json/Payment/swagger/v1/swagger.json"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/swagger-json/Payment"
          }
        ]
      }
    },
    "Clusters": {
      "AuthServer": {
        "Destinations": {
          "AuthServer": {
            "Address": "http://localhost:44381/"
          }
        }
      },
      "Administration": {
        "Destinations": {
          "Administration": {
            "Address": "http://localhost:44351/"
          }
        }
      },
      "Gdpr": {
        "Destinations": {
          "Gdpr": {
            "Address": "http://localhost:44330/"
          }
        }
      },
      "Language": {
        "Destinations": {
          "Language": {
            "Address": "http://localhost:44374/"
          }
        }
      },
      "Chat": {
        "Destinations": {
          "Chat": {
            "Address": "http://localhost:44374/"
          }
        }
      },
      "ContentManagement": {
        "Destinations": {
          "ContentManagement": {
            "Address": "http://localhost:44388/"
          }
        }
      },
      "DocumentManagement": {
        "Destinations": {
          "DocumentManagement": {
            "Address": "http://localhost:44386/"
          }
        }
      },
      "FormManagement": {
        "Destinations": {
          "FormManagement": {
            "Address": "http://localhost:44319/"
          }
        }
      },
      "Email": {
        "Destinations": {
          "Email": {
            "Address": "http://localhost:44310/"
          }
        }
      },
      "Sms": {
        "Destinations": {
          "Sms": {
            "Address": "http://localhost:44392/"
          }
        }
      },
      "Notification": {
        "Destinations": {
          "Notification": {
            "Address": "http://localhost:44331/"
          }
        }
      },
      "Demo": {
        "Destinations": {
          "Demo": {
            "Address": "http://localhost:44328/"
          }
        }
      },
      "FastTrack": {
        "Destinations": {
          "FastTrack": {
            "Address": "http://localhost:44316/"
          }
        }
      },
      "Lounge": {
        "Destinations": {
          "Lounge": {
            "Address": "http://localhost:44360/"
          }
        }
      },
      "DutyFree": {
        "Destinations": {
          "DutyFree": {
            "Address": "http://localhost:44334/"
          }
        }
      },
      "Atu": {
        "Destinations": {
          "Atu": {
            "Address": "http://localhost:44348/"
          }
        }
      },
      "Setting": {
        "Destinations": {
          "Setting": {
            "Address": "http://localhost:44367/"
          }
        }
      },
      "Yolcu360": {
        "Destinations": {
          "Setting": {
            "Address": "http://localhost:44333/"
          }
        }
      },
      "Order": {
        "Destinations": {
          "Order": {
            "Address": "http://localhost:44354/"
          }
        }
      },
      "Profile": {
        "Destinations": {
          "Profile": {
            "Address": "http://localhost:44360/"
          }
        }
      },
      "Payment": {
        "Destinations": {
          "Payment": {
            "Address": "http://localhost:44372/"
          }
        }
      }
    }
  }
}

publicgateway.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "treva-publicgateway"
spec:
  selector:
    matchLabels:
      app: "treva-publicgateway"
  template:
    metadata:
      labels:
        app: "treva-publicgateway"
    spec:
      containers:
      - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: "{{ .Values.image.pullPolicy }}"
        name: "treva-publicgateway"
        ports:
        - name: "http"
          containerPort: 80
        env:
        - name: "DOTNET_ENVIRONMENT"
          value: "{{ .Values.global.dotnetEnvironment }}"
        - name: "App__CorsOrigins"
          value: "{{ .Values.app.corsOrigins }}, {{ include "treva.hosts.authserver" . }}, {{ include "treva.hosts.webpublic" . }}, {{ include "treva.hosts.angular" . }}"

        - name: "ElasticSearch__IsLoggingEnabled"
          value: "{{ .Values.global.elasticSearch.isLoggingEnabled }}"
        - name: "ElasticSearch__Url"
          value: "http://treva-elasticsearch:{{ .Values.global.elasticSearch.port }}"
        - name: "Swagger__IsEnabled"
          value: "{{ .Values.swagger.isEnabled }}"
        - name: "AbpStudioClient__StudioUrl"
          value: "{{ .Values.global.abpStudioClient.studioUrl }}"
        - name: "AbpStudioClient__IsLinkEnabled"
          value: "{{ .Values.global.abpStudioClient.isLinkEnabled }}"

        - name: "ReverseProxy__Clusters__AuthServer__Destinations__AuthServer__Address"
          value: "http://treva-authserver"
        - name: "ReverseProxy__Clusters__Administration__Destinations__Administration__Address"
          value: "http://treva-administration"
        - name: "ReverseProxy__Clusters__Saas__Destinations__Saas__Address"
          value: "http://treva-saas"
        - name: "ReverseProxy__Clusters__AuditLogging__Destinations__AuditLogging__Address"
          value: "http://treva-auditlogging"
        - name: "ReverseProxy__Clusters__Gdpr__Destinations__Gdpr__Address"
          value: "http://treva-gdpr"
        - name: "ReverseProxy__Clusters__FileManagement__Destinations__FileManagement__Address"
          value: "http://treva-fileManagement"
        - name: "ReverseProxy__Clusters__Language__Destinations__Language__Address"
          value: "http://treva-language"
        - name: "ReverseProxy__Clusters__Chat__Destinations__Chat__Address"
          value: "http://treva-chat"
        - name: "ReverseProxy__Clusters__Identity__Destinations__Identity__Address"
          value: "http://treva-identity"
        - name: "ReverseProxy__Clusters__ContentManagement__Destinations__ContentManagement__Address"
          value: "http://treva-contentmanagement"
        - name: "ReverseProxy__Clusters__DocumentManagement__Destinations__DocumentManagement__Address"
          value: "http://treva-documentmanagement"
        - name: "ReverseProxy__Clusters__FormManagement__Destinations__FormManagement__Address"
          value: "http://treva-formmanagement"
        - name: "ReverseProxy__Clusters__Email__Destinations__Email__Address"
          value: "http://treva-email"
        - name: "ReverseProxy__Clusters__Sms__Destinations__Sms__Address"
          value: "http://treva-sms"
        - name: "ReverseProxy__Clusters__Notification__Destinations__Notification__Address"
          value: "http://treva-notification"
        - name: "ReverseProxy__Clusters__Demo__Destinations__Demo__Address"
          value: "http://treva-demo"
        - name: "ReverseProxy__Clusters__FastTrack__Destinations__FastTrack__Address"
          value: "http://treva-fasttrack"
        - name: "ReverseProxy__Clusters__Lounge__Destinations__Lounge__Address"
          value: "http://treva-lounge"
        - name: "ReverseProxy__Clusters__DutyFree__Destinations__DutyFree__Address"
          value: "http://treva-dutyfree"
        - name: "ReverseProxy__Clusters__Atu__Destinations__Atu__Address"
          value: "http://treva-atu"
        - name: "ReverseProxy__Clusters__Setting__Destinations__Setting__Address"
          value: "http://treva-setting"
        - name: "ReverseProxy__Clusters__PrimeClass__Destinations__PrimeClass__Address"
          value: "http://treva-primeclass"
        - name: "ReverseProxy__Clusters__Yolcu360__Destinations__Yolcu360__Address"
          value: "http://treva-yolcu360"
        - name: "ReverseProxy__Clusters__Order__Destinations__Order__Address"
          value: "http://treva-order"
        - name: "ReverseProxy__Clusters__Profile__Destinations__Profile__Address"
          value: "http://treva-profile"
        - name: "ReverseProxy__Clusters__Payment__Destinations__Payment__Address"
          value: "http://treva-payment"

publicgateway-service.yaml:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: "treva-publicgateway"
  name: "treva-publicgateway"
spec:
  ports:
    - name: "80"
      port: 80
  selector:
    app: "treva-publicgateway"

publicgateway-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "treva-publicgateway"
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-buffer-size: "32k"
    nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
    # cert-manager.io/cluster-issuer: "letsencrypt"
spec:
  ingressClassName: "nginx"
  tls:
  - hosts:
      - "{{ (include "treva.hosts.publicgateway" .) | trimPrefix "https://" }}"
    secretName: "{{ .Values.global.tlsSecret }}"
  rules:
  - host: "{{ (include "treva.hosts.publicgateway" .) | trimPrefix "https://" }}"
    http:
      paths:
      - path: /
        pathType: "Prefix"
        backend:
          service:
            name: "treva-publicgateway"
            port:
              number: 80

_helpers.tpl:

{{- define "treva.hosts.authserver" -}}
{{- print "https://" (.Values.global.hosts.authserver | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.webgateway" -}}
{{- print "https://" (.Values.global.hosts.webgateway | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.kibana" -}}
{{- print "https://" (.Values.global.hosts.kibana | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.grafana" -}}
{{- print "https://" (.Values.global.hosts.grafana | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.web" -}}
{{- print "https://" (.Values.global.hosts.web | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.mobilegateway" -}}
{{- print "https://" (.Values.global.hosts.mobilegateway | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.webpublic" -}}
{{- print "https://" (.Values.global.hosts.webpublic | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.angular" -}}
{{- print "https://" (.Values.global.hosts.angular | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}
{{- define "treva.hosts.publicgateway" -}}
{{- print "https://" (.Values.global.hosts.publicgateway | replace "[RELEASE_NAME]" "treva") -}}
{{- end -}}

values.yaml:

global:
  tlsSecret: "treva-tls"
  abpStudioClient:
    isLinkEnabled: "false"
    studioUrl: "http://abp-studio-proxy:38271"
  elasticSearch:
    isLoggingEnabled: "true"
    port: 9200
  hosts:
    authserver: "[RELEASE_NAME]-authserver.tav.aero"
    webgateway: "[RELEASE_NAME]-webgateway.tav.aero"
    kibana: "[RELEASE_NAME]-kibana.tav.aero"
    grafana: "[RELEASE_NAME]-grafana.tav.aero"
    web: "[RELEASE_NAME]-web.tav.aero"
    mobilegateway: "[RELEASE_NAME]-mobilegateway.tav.aero"
    publicgateway: "[RELEASE_NAME]-publicgateway.tav.aero"
    webpublic: "[RELEASE_NAME]-webpublic.tav.aero"
    angular: "[RELEASE_NAME]-website.tav.aero"
  connectionStrings:
    payment: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_PaymentService;User ID=postgres;Password=myPassword;Timeout=240;"
    profile: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ProfileService;User ID=postgres;Password=myPassword;Timeout=240;"
    order: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_OrderService;User ID=postgres;Password=myPassword;Timeout=240;"
    yolcu360: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Yolcu360Service;User ID=postgres;Password=myPassword;Timeout=240;"
    primeclass: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_PrimeClassService;User ID=postgres;Password=myPassword;Timeout=240;"
    setting: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SettingService;User ID=postgres;Password=myPassword;Timeout=240;"
    dutyfree: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DutyFreeService;User ID=postgres;Password=myPassword;Timeout=240;"
    atu: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_AtuService;User ID=postgres;Password=myPassword;Timeout=240;"
    lounge: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_LoungeService;User ID=postgres;Password=myPassword;Timeout=240;"
    fasttrack: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FastTrackService;User ID=postgres;Password=myPassword;Timeout=240;"
    demo: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DemoService;User ID=postgres;Password=myPassword;Timeout=240;"
    notification: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_NotificationService;User ID=postgres;Password=myPassword;Timeout=240;"
    sms: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SmsService;User ID=postgres;Password=myPassword;Timeout=240;"
    email: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_EmailService;User ID=postgres;Password=myPassword;Timeout=240;"
    formmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FormManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
    documentmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DocumentManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
    contentmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ContentManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
    administration: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Administration;User ID=postgres;Password=myPassword;Timeout=240;"
    blobStoring: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_BlobStoring;User ID=postgres;Password=myPassword;Timeout=240;"
    identity: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Identity;User ID=postgres;Password=myPassword;Timeout=240;"
    saas: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SaasService;User ID=postgres;Password=myPassword;Timeout=240;"
    auditLogging: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_AuditLoggingService;User ID=postgres;Password=myPassword;Timeout=240;"
    gdpr: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_GdprService;User ID=postgres;Password=myPassword;Timeout=240;"
    filemanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FileManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
    language: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_LanguageService;User ID=postgres;Password=myPassword;Timeout=240;"
    chat: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ChatService;User ID=postgres;Password=myPassword;Timeout=240;"
  dotnetEnvironment: "Staging"
  enablePII: "true"
  stringEncryptionDefaultPassPhrase: "KiT4nzwu9KfP40zB"
image:
  repository: "tavhqwebtrvdcr.tav.aero/treva/publicgateway"
  tag: "latest"
  pullPolicy: "IfNotPresent"
swagger:
  isEnabled: "true"
app:
  corsOrigins: "http://localhost:4200,http://localhost:44381,http://localhost:44380"
  • ABP Framework version: v9.0.2
  • UI Type: MVC
  • Database System: EF Core (PostgreSQL, etc..)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes
  • Exception message and full stack trace: Details: 2 UNKNOWN: Received HTTP status code 500
  • Steps to reproduce the issue: Create a mew Microservice and add Grpc Service like in the example: https://abp.io/community/articles/using-grpc-with-the-abp-framework-2dgaxzw3

Hi Dear Friends,

I used the information on given example: https://abp.io/community/articles/using-grpc-with-the-abp-framework-2dgaxzw3

But when i try to send request from postman or any other client it gave :"Details: 2 UNKNOWN: Received HTTP status code 500"

And on server side below exceptions given:

Exception thrown: 'System.InvalidOperationException' in Microsoft.AspNetCore.Routing.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in Volo.Abp.AspNetCore.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll

Can you help me please*

nginx.conf: server { listen 80; listen [::]:80; server_name _;

#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;        
    index  index.html index.htm;
    try_files $uri $uri/ /index.html =404;		
}

location /getEnvConfig {
	default_type 'application/json';
    add_header 'Access-Control-Allow-Origin' 'https://treva-website.tav.aero' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT' always;
    add_header 'Content-Type' 'application/json';
	try_files $uri /dynamic-env.json;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

}

Dockerfile.azure: FROM node:22.13-alpine as builder WORKDIR /src

COPY . . WORKDIR /src

RUN yarn RUN yarn run build:prod

FROM nginx:alpine as publish

COPY --from=builder /src/dynamic-env.json /usr/share/nginx/html COPY --from=builder /src/nginx.conf /etc/nginx/conf.d/default.conf COPY --from=builder /src/dist/treva /usr/share/nginx/html

But i used nginx for reverse proxying and i added the headers that i need to add.

Showing 1 to 10 of 44 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
Do you need assistance from an ABP expert?
Schedule a Meeting
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.2.0-preview. Updated on March 25, 2025, 11:10