Przejdź do głównej zawartości

Konfiguracja techniczna aplikacji


System archITekt wykorzystuje własny mechanizm konfiguracji aplikacji, będący rozszerzeniem standardowego mechanizmu konfiguracji aplikacji .NET, dzięki któremu konfiguracja i wdrożenie aplikacji końcowej jest prostsze.

Mechanizm konfiguracji technicznej:

  1. Umożliwia centralną konfigurację aplikacji oraz korzystanie ze zmiennych i wyrażeń w plikach *.config aplikacji .NET
  2. Udostępnia wbudowany mechanizm Health Check dla komponentów aplikacji

Mechanizm konfiguracji aplikacji​

  1. Działanie mechanizmu konfiguracji aplikacji opiera się o stosowanie zmiennych i wyrażeń w plikach *.config uruchamianej aplikacji.
  2. W momencie uruchamiania aplikacji rozwiązywane są wartości zmiennych i wyrażeń w taki sposób, że wewnętrzny mechanizm konfiguracji .NET otrzymuje już właściwe wartości w plikach konfiguracyjnych.
  3. Rozwiązywanie zmiennych działa wyłącznie na samym początku uruchomienia aplikacji, na etapie, gdy konfiguracja jeszcze nie została wczytana przez wewnętrzne mechanizmy .NET i nie ingeruje w późniejszym czasie w konfigurację aplikacji.
  4. Oznacza to, że zmiana konfiguracji aplikacji wymaga jej restartu, analogicznie jak w przypadku korzystania ze standardowego mechanizmu konfiguracji .NET.

Użycie zmiennych w aplikacji​

Chcąc wykorzystać zmienną w pliku konfiguracyjnym (*.config) zapisujemy jej nazwę korzystając z notacji {nazwa_zmiennej}

Poniżej przykład zapisu sekcji ConnectionStrings, w której użyto kilku zmiennych do zdefiniowania połączeń do baz danych:

<connectionStrings>
<add name=”CONNECT_STRING”
connectionString=”{common.connection.db_data}”
providerName=”System.Data.SqlClient” />
>add name=”VSFE.CONFIG_DB”
providerName=”System.Data.SqlClient”
connectionString=”{common.connection.db_config}” />
<add name=”ADConnectionString”
connectionString=”{common.connection.provider_ad}” />
[..]

W przypadku niektórych sekcji, mechanizm konfiguracji .NET wykonuje walidację typów i wartości wpisanych do konfiguracji i zastosowanie mechanizmu nawiasów klamrowych jest niemożliwe (kończy się rzuceniem wyjątku). W tych szczególnych przypadkach zmuszeni jesteśmy do skorzystania z alternatywnego sposobu zapisu konfiguracji – jako atrybuty ukryte w komentarzu do danego elementu.

Poniżej przykład konfiguracji sekcji Security.config korzystającej z mechanizmu komentarzy:

<SecurityConfig RedirectWhiteList=””
ForceHttps=”false”
EnableBusinessLimitsFilter=”false”
RunDiagnosticsMethods=”true”
ErrorLevel=”Normal”
SecureCookies=”__RequestVerificationToken,ASP.NET_SessionId,.AspNet.ApplicationCookie”>
<!--VCONFIG EnableBusinessLimitsFilter = {www.param.enable_business_limits_filter}-->
<!--VCONFIG ForceHttps = {common.param.force_https}-->
<!--VCONFIG RunDiagnosticsMethods = {common.param.run_diagnostics_methods}-->
<!--VCONFIG ErrorLevel = {www.param.security_error_level}-->
</SecurityConfig>

W powyższym przykładzie wartości atrybutów zostaną zastąpione wartościami zmiennych zapisanych w tagach komentarza zaczynających się od !--VSONFIG. Przykładowo, zgodnie z zaznaczeniem - wartość atrybutu ForeHttps zostanie zastąpiona wartością zmiennej common.param.force_https.

Zmienne i wyrażenia​

W ramach mechanizmu zmiennych konfiguracyjnych możemy korzystać z:

  1. wartości zmiennych np. {common.param_forece.https}, której wartość musi być zdefiniowana w źródłach zmiennych,
  2. wywołania statycznego property klasy np. {#System.DateTime.UtcNow} – w tym przypadku zostanie zwrócona aktualna data UTC,
  3. wyrażenia np. {#IsHttps({adres}) ? ‘bindingDlaHttps’ : ‘bindingDlaHttp’} - w tym przypadku działanie będzie identyczne jak dla operatora <warunek>?<prawda>:<fałsz> znanego z języka C#.

Poniżej praktyczne przykłady użycia powyższych zapisów:

Użycie zmiennej:

<appSettings>
<add key=”WINDOWS_AUTHENTICATION” value=”{www.param.windows_authentication}” />

Dla powyższego:

  1. www.param.windows_authentication – zmienna równa „true”
  2. wartość klucza VSFE.NODE_NAME będzie równa „true”

Użycie statycznego property z kodu:

<appSettings>
<add key=”VSFE.NODE_NAME”
value=”{#VSoft.Framework.Environment.Environment.PhysicalMachineName}_VBP_WEB” />

Dla powyższego:

  1. VSoft.Framework.Environment.Environment.PhysicalMachineName - statyczne property w kodzie zwracające „MOJ_KOMPUTER”
  2. wartość klucza VSFE.NODE_NAME będzie równa „MOJ_KOMPUTER_VBP_WEB”

Użycie wyrażenia:

<client>
<endpoint address= ”http://invalid.url/”
bindingConfiguration=”webHttp”
binding=”wsHttpBinding”
contract=”EntryPointService”’
name=”EntryPointService”>
<!--VCONFIG: bindingConfiguration={IsHttps({specyfic.url})?’webHttp’:’webHttpSecure’}-->
<!--VCONFIG: address={specyfic.url}/WebServices/EntryPoint.svc-->
</endpoint>

Dla powyższego:

  1. specyfic.url – zmienna o wartości https://my.address.com
  2. wartość wyrażenia IsHttps({specyfic.url}) to „true”
  3. wartość atrybutu bindingConfiguration będzie równa webHttpSecure
ostrzeżenie

W powyższym przykładzie dla atrybutów address i bindingConfiguration podano inicjalne formalnie prawidłowe wartości, które w momencie startu konfiguracji będą wymieniane na wartości docelowe.

Takie podejście jest wymagane, ponieważ część konfiguracji jest sprawdzana przez wewnętrzny kod .NET (niezarządzany lub zarządzany) jeszcze przed uruchomieniem mechanizmu podmiany wartości i napotkanie w podmienianych atrybutach wartości niepoprawnych powodują zatrzymanie programu na starcie.

W tym konkretnym przypadku:

  1. property adress jest typu URI w obiektowym modelu konfiguracji nie toleruje znaku { na początku tekstu,
  2. property bindingConfiguration (czy tez behavior) odnoszące się do innych plików muszą początkowo mieć wartości prowadzące do istniejących wpisów w innych częściach konfiguracji.

W przypadku wyrażeń możliwe do użycia są funkcje:

  1. IsHttps(…) - sprawdza czy podany adres jest chroniony SSL („https://”) czy nie („http://”). Zwraca true jeśli adres rozpoczyna się od „https://”
  2. IsEmpty(…) – czy argument jest rozwiązywalny do pustego napisu (null lub whitespace). Działa analogicznie jak metoda .NET Framework „String.IsNullOrWhiteSpace()”
  3. IsBraced(…) – czy podany argument jest rozpoznanym kluczem konfiguracji technicznej. Uwaga! Funkcja eksperymentalna.

Mechanizm nie udostępnia możliwości dopisywania własnych funkcji przez dewelopera.

Definiowanie wartości zmiennych​

Zmienne używane na potrzeby mechanizmu konfiguracji odczytywane są z:

  1. pliku [nazwa aplikacji].exe.config.ini,
  2. bazy danych konfiguracyjnej,
  3. sekcji appSettings konfiguracji lokalnej, W tym przypadku nazwą zmiennej będzie wartość atrybutu key, a wartością zmiennej wartość atrybutu value.
  4. sekcji connectionStrings konfiguracji lokalnej. W tym przypadku nazwą zmiennej będzie wartość atrybutu name, a wartością zmiennej wartość atrybutu connectionString.
  5. zmiennych środowiskowych – po ustawieniu klucza appSettings VSFE.CONFIG_ENV_ORDER:
  • na wartość „First” – wówczas ich wartość jest ważniejsza niż wartości z .ini
  • na wartość „Last” – wówczas kolejność rozwiązywania wartości przypada po źródle bazodanowym

Brak ustawienia klucza VSFE.CONFIG_ENV_ORDER powoduje brak włączenia tego dostawcy zmiennych.

wskazówka

Wykorzystanie zmiennych środowiskowych można też włączyć w kodzie ustawiając bardzo wcześnie właściwość ConfigReplacer.EnvReplacerOrder

  1. Powyższa lista została posortowana w kolejności ważności wpisów.
  2. Wpisy znajdujące się w źródle wymienionym na wyższej pozycji nadpisują definicję zmiennej znajdującą się w źródle znajdującym się na niższej pozycji.
  3. Przykładowo, jeśli zmienna environmentName zostanie zdefiniowana a sekcji appConfig oraz w pliku
    [nazwa aplikacji].exe.config.ini to w aplikacji zostanie wykorzystana wartość z pliku [nazwa aplikacji].exe.config.ini.

Definiowanie wartości zmiennych w pliku .config.ini​

W przypadku gdy w katalogu aplikacji znajdzie się plik o nazwie „[nazwa aplikacji].exe.config.ini” (czyli np. dla aplikacji WWW będzie to plik „Web.config.ini”) to zostaną z niego pobrane wartości zmiennych.

Przykład sposobu budowy pliku:

; Ten plik ma postać linii Klucz=Wartość
; W standardowej konfiguracji .NET (xml) można używać {Kluczy} i zostaną one podmienione na starcie.
; Klucze o zawartości wrażliwej (z hasłami itp..) należy umieścić w sekcji [SecuritySensitive]
; Klucze mogą mieć też postać odwołań .NET, np.:
; {#System.Environment.MachineName}
; {#System.AppDomain.CurrentDomain.BaseDirectory} -- katalog, z którego wystartował program/moduł
; {#System.DateTime.Now} -- bieżąca data i godzina
; {#System.DateTime.UtcNow} -- bieżąca data i godzina UTC
studio.mode = InProc
studio.winAuth = true

; połączenie do bazy danych
[SecuritySensitive]
common.connection.db_config = data source=RBABICZ10\SQLEXPRESS;
initial catalog=ARCHITEKT_DEMO_191_CONFIG;User Id=xxx;Password=xxx;MultipleActiveResultSets=True;
[SecuritySensitive]
my.secrect.password = very_secret_123

Umieszczając w pliku *.ini wartości zmiennych w sekcjach SecuritySensitive powodujemy, że ich wartości nie zostaną zapisane w logu.

Definiowanie wartości zmiennych w bazie danych​

Aplikacja korzystająca z mechanizmu konfiguracji pobiera wartości zmiennych z bazy danych jeśli w sekcji connectionStrings jest zdefiniowane połączenie do bazy o nazwie VSFE.CONFIG_DB

W przypadku, gdy takie połączenie istnieje, wówczas wczytywana jest definicja zmiennych z tabeli CONFIG_KEYS.

Tabela zakładana jest poprzez standardowe skrypty VSoft archITekt. Jej poszczególne kolumny:

  1. CK_KEY – przechowuje nazwę zmiennej
  2. CK_VALUE – przechowuje wartość zmiennej
  3. CK_NODE_NAME – jeśli jest pusta, to wartość zmiennej obowiązuje dla wszystkich komponentów środowiska. Jeśli nie, wówczas wartość zmiennej obowiązuje na komponentach o nazwie wskazanej w tej kolumnie (można stosować wyrażenia regularne, np. ^MyServer_.*$ )
  4. CK_SENSITIVE – wartość 1 oznacza, że zmienna jest wrażliwą; działa identycznie jak atrybut SecuritySensitive w pliku *.config.ini (zmienna jest ukrywana na listach kluczy). Flaga nie szyfruje wartości – zaszyfrowana wartość (ENC1:) jest odszyfrowywana niezależnie od flagi. Wartość kolumny ustawiają skrypty instalacyjne – patrz Klucze wrażliwe
  5. CK_DESCRIPTION – opis znaczenia zmiennej
  6. CK_PUBLIC – wartość 1 oznacza, że zmienna pojawi się w edytowanym widoku ENV_CONFIGURATION
wskazówka

W kolumnie CK_NODE_NAME można stosować wildcardy, czyli np. zapisanie nazwy węzła w postaci DB_* spowoduje, że wartość zmiennej będzie widoczna na wszystkich węzłach, których nazwa zaczyna się od DB_

Widok ENV_CONFIGURATION przechowujący część zmiennych wykorzystywany jest wówczas, gdy chcemy końcowemu administratorowi systemu zawęzić wgląd jedynie w część zmiennych do konfiguracji. Wówczas należy ustalić z nim, by korzystał z tego widoku a nie bezpośrednio z tabeli CONFIG_KEYS

Na potrzeby skryptów instalacyjnych / aktualizacyjnych zostały dostarczone procedury składowane:

  1. EnsureConfigKey – tworząca nowy wpis w bazie danych oraz aktualizująca opis dla istniejących kluczy (nie zmienia wartości klucza, jeśli już taki istnieje)
  2. GetConfigKey – zwracająca wartość danego klucza
  3. SetConfigKey – ustalająca wartość klucza w bazie danych

Definiowanie wartości w sekcjach appConfig i connectionString​

Wpisy w sekcjach appConfig i connectionString są traktowane jako zmienne możliwe do wykorzystania w mechanizmie konfiguracji technicznej.

  1. W przypadku appConfig nazwą zmiennej jest atrybut key, wartością atrybut value.
  2. W przypadku connectionString nazwą zmiennej jest atrybut name, wartością atrybut connectionString.

Ograniczenia​

Mechanizm działa wyłącznie dla głównego pliku app.config / web.config i plików, które są jego dziećmi. Nie obsługuje plików *.config, które są niezależne od pliku app.config / web.config, takich jak np:

  1. NLog.config, gdy jest wczytywany wewnętrznym mechanizmem NLog’a i jest włączany w aplikacji za pomocą:
<nlog>
<include file=”${basedir}/Configuration/Environment/NLog.config” />
</nlog>
  1. pliki Web.Config znajdujące się w podkatalogach aplikacji WWW. W tym przypadku w danym podkatalogu wszystkie strony korzystają z podstawowego mechanizmu konfiguracji .NET z nie-rozwiązanymi wartościami zmiennych.

Konwencja nazywania zmiennych​

W celu zachowania porządku w nazwach zmiennych używanych w konfiguracji technicznej sugerowane jest zastosowanie poniższej konwencji nazewniczej:

{nazwa komponentu}.{typ wpisu}.{nazwa wpisu}

Poszczególne pola powinny być wypełniane wartościami:

  1. nazwa komponentu: nazwa komponentu, w którym używana jest zmienna konfiguracyjna. Jeśli zmienna używana jest w kilku komponentach jako nazwę komponentu należy podać common
  2. typ komponentu: typ powinien być skorelowany z tym, co dana zmienna przechowuje. Najczęściej stosowane typy zmiennych to: url, restapi, connection, id, cert, param. W przypadku stosowania specyficznego, niepowtarzalnego, typu zmiennych, jako typ należy podać param
  3. nazwa wpisu – nazwa powinna w jasny sposób opisywać do czego służy zmienna.

Dodatkowo, dbając o łatwość konfiguracji należy zadbać o to, by w polu CK_DECRIPTION podać jasny komentarz do czego służy klucz, jeśli to konieczne, to również jakie wartości są konieczne do wprowadzenia.

Mechanizm Health Check​

Platforma archITekt posiada wbudowany mechanizm health check.

Mechanizm:

  1. powoduje cykliczne raportowanie przez poszczególne komponenty informacji o tym czy działają zapisywane w bazie danych,
  2. umożliwia z poziomu centralnej bazy danych uruchamianie w komponentach funkcji auto-diagnostyki na różnych poziomach szczegółowości.

Tabela NODES​

Mechanizm działa w oparciu o tabelę NODES znajdującą się w konfiguracyjnej bazie danych, która jest zakładana za pomocą standardowych skryptów archITekta.

Tabela NODES zawiera kolumny:

  1. N_NAME – nazwa NODE, wartość która jest konfigurowana w sekcji appConfig w kluczu VSFE.NODE_NAME Wartość powinna być unikalna dla każdego NODE.
  2. N_STATUS_AUTO – wyświetla w czytelny sposób informację o życiu komponentu. Wartość jest wyliczana z pól N_STATUS, N_STATUS_DT
  3. N_COMMAND_INPUT – pole, w które można wpisać dane komendy do uruchomienia diagnostyki.
  4. N_COMMENT – informacje na temat węzła. W to pole może wpisać tekst użytkownik, nie są one w żaden sposób modyfikowane przez komponent.
  5. N_HOSTNAME – nazwa hosta, na którym zainstalowany jest komponent.
  6. N_IP – adres IP pierwszego interfejsu sieciowego komputera, na którym działa komponent.
  7. N_PID – numer procesu działającego komponentu.
  8. N_START_DT – czas uruchomienia komponentu. Aktualizowany podczas kolejnego (re)startu komponentu.
  9. N_PASSIVE_URL – adres dostępowy do komponentu dla komponentów WWW.
  10. N_DIR_PATH – ścieżka sieciowa prowadząca do katalogu z binariami komponentu.
  11. N_STATUS – informacja o statusie działania komponentu.
  12. N_STATUS_DT – czas ostatniej aktualizacji tabeli przez komponent.

Cykliczne potwierdzanie życia komponentu​

Komponenty aplikacji aktualizują cyklicznie informacje o swoim statusie w tabeli NODES uaktualniając pola N_STATUS i N_STATUS_DT Na tej podstawie wyliczana jest wartość pola N_STATUS_AUTO

Sterowanie działaniem mechanizmu health check​

Mechanizm health check jest sterowany przez ustawienia kluczy konfiguracyjnych.

Nazwa kluczaOpisDziałanie w przypadku braku klucza
VSFE.NODES_DBUstawienie tego klucza w connectionStrings, spowoduje że we wskazanej bazie danych będzie poszukiwana tabela NODES.Brak ustawienia klucza spowoduje wykorzystania połączenia z klucza VSFE.CONFIG_DB
VSFE.NODE_NAMENazwa węzła, musi być unikalna dla każdego komponentu aplikacji, w przeciwnym wypadku w logach regularnie będą raportowane błędy dotyczące nt. wykrycia duplikatu węzła.Brak ustawienia klucza spowoduje wyłączenie mechanizmu health check dla danego komponentu.
VSFE.POLLING_INTERVALKlucz określa co ile sekund ma uruchamiać się mechanizm raportujący aktualny stan węzła w tabeli NODES. próba komunikacji z bazą węzłów (domyślnie 30).Brak ustawienia klucza spowoduje wykorzystanie domyślnego ustawienia - mechanizm będzie raportował co 30 sekund.
VSFE.CONFIG_RECHECK_MODETryb raportowania w przypadku zmiany wartości kluczy konfiguracyjnych.Dopuszczalne wartości: NONE, REPORT_USED_CONFIG_ONLY, REPORT_ALL. Brak ustawienia klucza spowoduje wykorzystanie domyślnego ustawienia - REPORT_USED_CONFIG_ONLY.

Wartości dla zmiennej VSFE.CONFIG_RECHECK_MODE

  1. Wartość REPORT_ALL oznacza, że zmiana dowolnego klucza konfiguracji (nawet nie używanego w plikach .config) powoduje raportowanie.
  2. Wartość REPORT_USED_CONFIG_ONLY powoduje reakcję tylko gdy zmieniła się wartość klucza używanego przez pliki .config.

Uruchomienie procedury diagnostyki

  1. Uruchomienie procedury diagnostyki jest wykonywane poprzez aktualizację tabeli NODES dla wybranego węzła – należy wpisać w kolumnę N_COMMAND_INPUT wartość „DIAG n”, gdzie n to liczba do przekazania do zarejestrowanych fabryk diagnostyki
  2. VSoft.Framework.Environment.Diagnostics.IDiagnosableFactory.Create
  3. Rezultaty działania wytworzonych procedur diagnostyki zostaną zapisane w logach technicznych danego komponentu.
  4. Własne procedury reakcji na zapisy w kolumnie N_COMMAND_INPUT można rejestrować w EnvNode.CommandHandlers. Prefix „DIAG” jest jedną z tego typu rejestracji.

Konfiguracja SMTP - common.param.smtp_​

Aby możliwa była wysyłka e-maili należy skonfigurować poniższe opcje. Wszystkie ustawienia serwera pocztowego SMTP mają wspólny trzon nazwy common.param.smtp_

Wykaz zmiennych:

Nazwa zmiennejWartość domyślnaOpis
common.param.smtp_serverAdres serwera pocztowego SMTP
common.param.smtp_port25Port usługi SMTP
common.param.smtp_securityAutoSposób zabezpieczania połączenia
common.param.smtp_ignore_certificate_errorsNoneZmiana niezalecana. Pozwala zignorować niektóre błędy certyfikatów serwera
common.param.smtp_usernameNazwa użytkownika dla usługi SMTP. Używane, gdy common.param.smtp_authentication jest ustawione na UserPassword
common.param.smtp_passwordHasło użytkownika dla usługi SMTP. Używane, gdy common.param.smtp_authentication ma wartość UserPassword
common.param.smtp_authenticationUserPasswordTryb uwierzytelniania serwera SMTP. Jeśli wartość klucza jest pusta, system użyje wartości domyślnej UserPassword. Możliwe wartości: UserPassword - Nazwa użytkownika i hasło są wymagane do uwierzytelnienia. Wartość domyślna. Anonymous - dostęp anonimowy. Serwer nie wymaga uwierzytelniania.

Zmienne bez wyspecyfikowanej wartości domyślnej należy obowiązkowo skonfigurować.

wskazówka

Zmienne common.param.smtp_server, common.param.smtp_username i common.param.smtp_password są wrażliwe z definicji – ich wartości podane w parametrze configKeys skryptów instalacyjnych są zapisywane w sposób zaszyfrowany i nie trafiają do logów. Patrz: Klucze wrażliwe.

common.param.smtp_server​

Określa adres DNS serwera pocztowego SMTP, np. "mail.contoso.com".

  1. Wartość obowiązkowa.
  2. Brak wartości domyślnej.

common.param.smtp_port​

Określa port usługi SMTP.

  1. Wartość domyślna to 25.
  2. Wartość domyślna nie zależy od innych ustawień.
  3. Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
  4. Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).

common.param.smtp_security​

Ustawienie zabezpieczenia połączenia z serwerem SMTP.

  1. Domyślna wartość to Auto.
  2. Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość
  3. Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).

Zmienna przyjmuje wartości z typu enum VTS2.Core.Blocks.Output.SmtpConnectionSecurity

WartośćOpis
NonePołączenie niezabezpieczone.
AutoAplikacja wynegocjuje najbardziej bezpieczny rodzaj połączenia.
SslOnConnectAplikacja wymaga połączenia zabezpieczonego od samego początku.
StartTlsAplikacja wymaga, aby serwer wspierał rozszerzenie protokołu STARTTLS. We wstępnej fazie połączenie nie będzie zabezpieczone.
StartTlsWhenAvailableAplikacja użyje rozszerzenia STARTTLS jeżeli jest obsługiwane przez serwer SMTP. Jeżeli nie, połączenie pozostanie niezabezpieczone i e-maile będą wysyłane bez szyfrowania. W zależności od konfiguracji serwera działa jak StartTls albo jak None.
wskazówka

Dostępne opcje są kopią z SecureSocketOptions w MailKit v2.9. Więcej informacji może być dostępne dokumentacji na stronie projektu: http://www.mimekit.net/.

smtp_ignore_certificate_errors​

wskazówka

Zmiana domyślnej wartości nie jest zalecana, a nawet odradzana.

Ustawienie pozwala na zignorowanie pewnych błędów konfiguracji certyfikatów serwera SMTP.

  1. Domyślna wartość to None.
  2. Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
  3. Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).

Dostępne wartości pochodzą z typu enum VTS2.Core.Blocks.Output.IgnoreCertificateErrors

WartośćOpis
NoneJedyna zalecana wartość dla tego klucza. Każda inna w praktyce redukuje do zera poziom zabezpieczeń połączenia.
AllAplikacja zignoruje wszystkie błędy związane z certyfikatem. Odpowiednik ustawienia wszystkich flag.
RemoteCertificateNotAvailable(flaga) Certyfikat nie był dostępny.
RemoteCertificateNameMismatch(flaga) Certyfikat został opublikowany dla innego adresu serwera, niż adres połączenia zdefiniowany w kluczu common.param.smtp_server
RemoteCertificateChainErrors(flaga) Certyfikat nie mógł zostać poprawnie zwalidowany. Zwykle oznacza to, że w łańcuchu zaufania certyfikatu nie odnaleziono zaufanego certyfikatu (np. należącego do urzędu certyfikacji). Typowo błąd dotyczy certyfikatów roboczych (np. self-signed.)

Można połączyć dwie lub więcej wartości oznaczone jako flaga, rozdzielając przecinkiem, np:

RemoteCertificateNameMismatch, RemoteCertificateChainErrors pozwoli połączyć się z serwerem, który identyfikuje się roboczym certyfikatem wystawionym dla innego adresu, niż adres połączenia.

wskazówka

Wartości flag RemoteCertificate... odpowiadają bezpośrednio wartościom SslPolicyErrors. Więcej informacji o tym kiedy i dlaczego te błędy są zgłaszane może być dostępne na stronach Microsoftu.

common.param.smtp_authentication​

Tryb autentykacji dla serwera SMTP.

  1. Domyślna wartość to UserPassword
  2. Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
  3. Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).

Zmienna przyjmuje wartości z typu enum VTS2.Core.Blocks.Output.SmtpAuthentication

WartośćOpis
UserPasswordAutentykacja przy pomocy nazwy użytkownika i hasła podanego w zmiennych common.param.smtp_username i common.param.smtp_password
AnonymousPozwala na dostęp bez logowania w protokole SMTP, kiedy serwer nie wymaga autentykacji.

common.param.smtp_username​

Nazwa użytkownika do połączenia z serwerem SMTP.

  1. Wartość używana, gdy common.param.smtp_authentication jest ustawione na UserPassword
  2. Brak wartości domyślnej.

common.param.smtp_password​

Hasło użytkownika do połączenia z serwerem SMTP.

  1. Wartość używana, gdy common.param.smtp_authentication jest ustawione na UserPassword
  2. Brak wartości domyślnej.

Zobacz również​

Narzędzie DatabaseUpgrader

Troubleshooting