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