เดตเดฟเดฏเดจเตเดจเดจเต†เดฑเตเดฑเต: เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดจเดพเดฏเตเดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ. เดญเดพเด—เด‚ 2

Raiffeisenbank .NET เดกเต†เดตเดฒเดชเตเดชเตผ เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟ เดตเดฟเดฏเดจเตเดจเดจเต†เดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดนเตเดฐเดธเตเดตเดฎเดพเดฏเดฟ เด…เดตเดฒเต‹เด•เดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเดจเตเดจเต. เดŽเด™เตเด™เดจเต†, เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด‡เดคเดฟเดฒเต‡เด•เตเด•เต เดตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดฆเตเดฏ เดญเดพเด—เด‚ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เด‡เดŸเดชเดพเดŸเตเด•เตพ, เด•เตเดฏเต‚เด•เตพ, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเตเดตเดฐเต† เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดชเตเดชเต†เดŸเดพเดคเตเดค เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเดฟเดฒเต‚เดŸเต† เดžเด™เตเด™เตพ เดชเต‹เด•เตเด‚, โ€‹โ€‹เด…เดคเต เดžเด™เตเด™เดณเตเดŸเต† GitHub เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ (เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด‡เดตเดฟเดŸเต†เดฏเตเดฃเตเดŸเต), เด’เดชเตเดชเด‚ เดจเตเดฏเต‚เดœเต†เดฑเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เดตเดฟเดŸเต†เดฏเตเดฃเตเดŸเต.

เดตเดฟเดฏเดจเตเดจเดจเต†เดฑเตเดฑเต: เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดจเดพเดฏเตเดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ. เดญเดพเด—เด‚ 2

เดตเดฟเดฏเดจเตเดจเดจเต†เดฑเตเดฑเต.เดธเดพเด—เดธเต

เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดกเดฟเดกเดฟเดกเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดฒเต‡เด•เตเด•เตเด‚ เดฎเดพเดฑเตเดฎเตเดชเต‹เตพ, เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฒเต‹เดœเดฟเด•เต เดตเดฟเดตเดฟเดง เดธเต‡เดตเดจเด™เตเด™เดณเดฟเตฝ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เด‡เดŸเดชเดพเดŸเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดคเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เด’เดฐเต เดชเตเดฐเดถเตเดจเด‚ เด‰เดฃเตเดŸเดพเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดชเดฒ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเตเด‚ เด’เดฐเต‡เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ เดกเตŠเดฎเต†เดฏเตโ€Œเดจเตเด•เดณเต† เดฌเดพเดงเดฟเด•เตเด•เตเด‚. เด…เดคเตเดคเดฐเด‚ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเดพเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, "เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเดธเต เดชเดพเดฑเตเดฑเต‡เตบเดธเต" เดŽเดจเตเดจ เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝ, เด•เตเดฐเดฟเดธเต เดฑเดฟเดšเตเดšเดพเตผเดกเตเดธเตบ.

เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ, เดžเด™เตเด™เตพ เดฒเดณเดฟเดคเดตเตเด‚ เดŽเดจเตเดจเดพเตฝ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดตเตเดฎเดพเดฏ เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต: เด’เดฐเต เดธเดพเด—, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เด“เตผเด•เตเด•เดธเตเดŸเตเดฐเต‡เดทเตป เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดธเดพเด—. เด…เดคเดฟเดจเตเดฑเต† เดธเดพเดฐเดพเด‚เดถเด‚ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต: เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเต‡เดตเดจเด™เตเด™เดณเดฟเตฝ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเต‡เดฃเตเดŸ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดธเดพเดนเดšเดฐเตเดฏเดฎเตเดฃเตเดŸเต, เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดพเตฝ, เดฎเตเดฎเตเดชเดคเตเดคเต† เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเดฒเตเด‚ เดฑเต‹เตพเดฌเดพเด•เตเด•เต เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดตเดฟเดณเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดจเตฝเด•เดฟเดฏเดคเต. เด…เด™เตเด™เดจเต†, เดธเดพเด—เดฏเตเดŸเต† เด…เดตเดธเดพเดจเด‚, เดตเดฟเดœเดฏเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเดคเต†, เดŽเดฒเตเดฒเดพ เดกเตŠเดฎเต†เดฏเตโ€Œเดจเตเด•เดณเดฟเดฒเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เตเด‚.

เดžเด™เตเด™เดณเตเดŸเต† เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เด‡เดชเตเดชเต‹เดดเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เดฐเต‚เดชเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เดฎเดฑเตเดฑเต เดธเต‡เดตเดจเด™เตเด™เดณเตเดฎเดพเดฏเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏ เดฐเต€เดคเดฟเด•เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เด•เดพเดฐเตเดฏเดฎเดฒเตเดฒ: เด…เดŸเดฟเดธเตเดฅเดพเดจ เด…เดฌเตเดธเตเดŸเตเดฐเดพเด•เตเดฑเตเดฑเต เด•เตเดฒเดพเดธเดพเดฏ SagaBase<T> เดจเตเดฑเต† เด’เดฐเต เดชเดฟเตปเด—เดพเดฎเดฟเดฏเดพเด•เตเด•เตเด•, เด‡เดตเดฟเดŸเต† T เดŽเดจเตเดจเดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเดจเตเดฆเตผเดญ เด•เตเดฒเดพเดธเตเดธเดพเดฃเต, เด…เดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเดพเด— เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเตเดฐเดพเดฐเด‚เดญ เดกเดพเดฑเตเดฑเดฏเตเด‚ เดšเดฟเดฒ เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดซเดฒเด™เตเด™เดณเตเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดจเดฟเตผเดตเตเดตเดนเดฃ เดธเดฎเดฏเดคเตเดคเต เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดธเดจเตเดฆเตผเดญ เด‰เดฆเดพเดนเดฐเดฃเด‚ เด•เตˆเดฎเดพเดฑเตเด‚. เดธเดพเด— เดคเดจเตเดจเต† เด’เดฐเต เดธเตโ€Œเดฑเตเดฑเต‡เดฑเตเดฑเตโ€Œเดฒเต†เดธเต เด•เตเดฒเดพเดธเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‰เดฆเดพเดนเดฐเดฃเด‚ DI-เดฏเดฟเตฝ เด’เดฐเต เดธเดฟเด‚เด—เดฟเตพเดŸเดฃเดพเดฏเดฟ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เด‰เดฆเดพเดนเดฐเดฃ เดชเดฐเดธเตเดฏเด‚:

public class ExampleSaga : SagaBase<ExampleContext>
{
  public ExampleSaga()
  {
    Step("Step 1")
      .WithAction(c => ...)
      .WithCompensation(c => ...);
	
    AsyncStep("Step 2")
      .WithAction(async c => ...);
  }
}

เด‰เดฆเดพเดนเดฐเดฃ เด•เต‹เตพ:

var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);

เดตเดฟเดตเดฟเดง เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เดณเตเดŸเต† เดชเต‚เตผเดฃเตเดฃ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚ เด‡เดตเดฟเดŸเต† เด•เต‚เดŸเต† เด…เดธเด‚เดฌเตเดฒเดฟเดฏเดฟเดฒเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพ.

ViannaNET.Orm.*

Nhibernate เดตเดดเดฟ เดตเดฟเดตเดฟเดง เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ. เดžเด™เตเด™เตพ เดฒเดฟเด•เตเดตเดฟเดฌเต‡เดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเดฟเดฌเดฟ-เดซเดธเตเดฑเตเดฑเต เดธเดฎเต€เดชเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เด’เดฐเต เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดกเดพเดฑเตเดฑเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดฎเดพเดคเตเดฐเดฎเต‡เดฏเตเดณเตเดณเต‚.

ViennaNET.Orm.Seedwork ะธ ViennaNET.Orm - เดฏเดฅเดพเด•เตเดฐเดฎเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเตเด‚ เด…เดตเดฏเตเดŸเต† เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เดณเตเด‚ เด…เดŸเด™เตเด™เตเดจเตเดจ เดชเตเดฐเดงเดพเดจ เด…เดธเด‚เดฌเตเดฒเดฟเด•เตพ. เด…เดตเดฏเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดจเต‹เด•เตเด•เดพเด‚.

เด‡เดจเตเดฑเตผเดซเต‡เดธเต IEntityFactoryService เด…เดคเดฟเดจเตเดฑเต† เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเตเด‚ EntityFactoryService เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เด†เดฐเด‚เดญ เดชเต‹เดฏเดฟเดจเตเดฑเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดฏเต‚เดฃเดฟเดฑเตเดฑเต เด“เดซเต เดตเตผเด•เตเด•เต, เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ, เด…เดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เด•เดฎเดพเตปเดกเตเด•เดณเตเดŸเต† เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต€เดตเตเด•เดณเตเด‚ เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ SQL เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเตเด‚ เด‡เดตเดฟเดŸเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเตเด•เตพ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเต เดšเดฟเดฒเดชเตเดชเต‹เตพ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเดพเดฑเตเดฑ เดตเดพเดฏเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต. เด…เดคเตเดคเดฐเด‚ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ IEntityFactoryService เด’เดฐเต เดชเต‚เตผเดตเตเดตเดฟเด•เตป - เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด‰เดฃเตเดŸเต IEntityRepositoryFactory, เด‡เดคเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฐเต€เดคเดฟ เดฎเดพเดคเตเดฐเด‚ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดชเตเดฐเตŠเดตเตˆเดกเตผ เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เดณเตเดŸเต† เดŸเต€เดฎเตเด•เดณเดฟเตฝ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด“เดฐเต‹ DBMS-เดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เด‰เดฃเตเดŸเต: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

เด…เดคเต‡ เดธเดฎเดฏเด‚, เด’เดฐเต‡ เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ เดฆเดพเดคเดพเด•เตเด•เดณเต† เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดฟเดจเตเดณเตเดณเดฟเตฝ, เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดชเดฐเดฟเดทเตเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฏเดพเดคเตŠเดฐเต เดšเต†เดฒเดตเตเด‚ เด•เต‚เดŸเดพเดคเต†, เด’เดฐเต เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเตเดณเตเดณ เดฎเตˆเด—เตเดฐเต‡เดทเตป เดจเดŸเดคเตเดคเดพเตป เด‡เดคเต เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต DBMS เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเดฒเต‡เด•เตเด•เต. เด†เดตเดถเตเดฏเดฎเดพเดฏ เด•เดฃเด•เตเดทเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเด‚เดตเดฟเดงเดพเดจเด‚, เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟ เด•เตเดฒเดพเดธเดฟเดจเดพเดฏเตเดณเตเดณ เดฆเดพเดคเดพเดตเต (เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŸเต‡เดฌเดฟเดณเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฎเดพเดชเตเดชเดฟเด‚เด—เต เดŽเดดเตเดคเดฟเดฏเดคเต) เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเดฏเต† เดฌเต—เดฃเตเดŸเดกเต เด•เต‹เตบเดŸเต†เด•เตโ€Œเดธเต เด•เตเดฒเดพเดธเดฟเตฝ (เดกเตŠเดฎเต†เดฏเตเตป เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฐเต€เดคเดฟ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต) เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเดจเตเดฑเต† เดชเดฟเตปเด—เดพเดฎเดฟเดฏเดฟเตฝ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. ApplicationContext (เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเต€เดคเดฟเด•เตพ, เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ, เด•เดฎเดพเตปเดกเตเด•เตพ เดŽเดจเตเดจเดฟเดต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต), เด‡เดตเดฟเดŸเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เดฃเด•เตเดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด’เดฐเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดพเดฏเดฟ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต:

"db": [
  {
    "nick": "mssql_connection",
    "dbServerType": "MSSQL",
    "ConnectionString": "...",
    "useCallContext": true
  },
  {
    "nick": "oracle_connection",
    "dbServerType": "Oracle",
    "ConnectionString": "..."
  }
],

เด‰เดฆเดพเดนเดฐเดฃเด‚ เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดจเตเดฆเตผเดญเด‚:

internal sealed class DbContext : ApplicationContext
{
  public DbContext()
  {
    AddEntity<SomeEntity>("mssql_connection");
    AddEntity<MigratedSomeEntity>("oracle_connection");
    AddEntity<AnotherEntity>("oracle_connection");
  }
}

เด•เดฃเด•เตเดทเตป เดเดกเดฟ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, "เดกเดฟเดซเต‹เตพเดŸเตเดŸเต" เดŽเดจเตเดจเต เดชเต‡เดฐเตเดณเตเดณ เด•เดฃเด•เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต NHibernate เดŸเต‚เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดชเดŸเตเดŸเดฟเด•เด•เดณเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เดณเตเดŸเต† เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ เดฎเดพเดชเตเดชเดฟเด‚เด—เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต xml เดซเดฏเดฒเตเด•เดณเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เด•เตเดฒเดพเดธเตเด•เดณเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เดตเดฟเดตเดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดฏเต‚เดฃเดฟเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดธเตเดฑเตเดฑเดฌเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเต, เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดฃเตเดŸเต ViennaNET.TestUtils.Orm.

ViennaNET.Orm.* เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดชเต‚เตผเดฃเตเดฃ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เด‡เดตเดฟเดŸเต†.

ViannaNET.เดฎเต†เดธเต‡เดœเดฟเด‚เด—เต.*

เด•เตเดฏเต‚เดตเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ.

เด•เตเดฏเต‚เด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป, เดตเดฟเดตเดฟเดง เดกเดฟเดฌเดฟเดŽเด‚เดŽเดธเตเด•เตพเด•เตเด•เตเดณเตเดณ เด…เดคเต‡ เดธเดฎเต€เดชเดจเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต, เด…เดคเดพเดฏเดคเต, เด•เตเดฏเต‚ เดฎเดพเดจเต‡เดœเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเดคเต†, เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดธเดพเดงเตเดฏเดฎเดพเดฏ เดชเดฐเดฎเดพเดตเดงเดฟ เดเด•เต€เด•เตƒเดค เดธเดฎเต€เดชเดจเด‚. เดชเตเดธเตเดคเด•เดถเดพเดฒ ViennaNET.Messaging เดˆ เดเด•เต€เด•เดฐเดฃเดคเตเดคเดฟเดจเต เด•เตƒเดคเตเดฏเดฎเดพเดฏ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดฎเตเดฃเตเดŸเต, เด•เต‚เดŸเดพเดคเต† ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue ะธ ViennaNET.Messaging.KafkaQueue เดฏเดฅเดพเด•เตเดฐเดฎเด‚ IBM MQ, RabbitMQ, Kafka เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เดพเดฏเตเดณเตเดณ เด…เดกเดพเดชเตเดฑเตเดฑเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฒเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เตเดฏเต‚เดตเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฐเดฃเตเดŸเต เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เด‰เดฃเตเดŸเต: เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•.

เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. เด‡เดตเดฟเดŸเต† 2 เด“เดชเตเดทเดจเตเด•เตพ เด‰เดฃเตเดŸเต: เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด’เดฐเตŠเดฑเตเดฑ เดธเดจเตเดฆเต‡เดถเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚. เด•เตเดฏเต‚ เดจเดฟเดฐเดจเตเดคเดฐเด‚ เด•เต‡เตพเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดชเดพเดฐเดฎเตเดชเดฐเตเดฏเดฎเดพเดฏเดฟ เดฒเดญเดฟเดšเตเดš เดชเตเดฐเต‹เดธเดธเตผ เด•เตเดฒเดพเดธเต เดตเดฟเดตเดฐเดฟเด•เตเด•เดฃเด‚ IMessageProcessor, เด‡เตปเด•เดฎเดฟเด‚เด—เต เดธเดจเตเดฆเต‡เดถเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เด‡เดคเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด‡เดคเต เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด•เตเดฏเต‚เดตเดฟเดฒเต‡เด•เตเด•เต "เดฒเดฟเด™เตเด•เต" เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เดฃเด‚; เด‡เดคเต เดฐเดœเดฟเดธเตเดŸเตเดฐเต‡เดทเตป เดตเดดเดฟเดฏเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต IQueueReactorFactory เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เตเดฏเต‚ เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:

"messaging": {
    "ApplicationName": "MyApplication"
},
"rabbitmq": {
    "queues": [
      {
        "id": "myQueue",
        "queuename": "lalala",
        ...
      }
    ]
},

เด•เต‡เตพเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚:

_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();

เดคเตเดŸเตผเดจเตเดจเต, เดธเต‡เดตเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เต‡เตพเด•เตเด•เดพเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเต€เดคเดฟ เดตเดฟเดณเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด•เตเดฏเต‚เดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เด…เดจเตเดฌเดจเตเดง เดชเตเดฐเต‹เดธเดธเตเดธเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด‚.

เด’เดฐเต เดซเดพเด•เตเดŸเดฑเดฟ เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เด’เดฐเตŠเดฑเตเดฑ เดธเดจเตเดฆเต‡เดถเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต IMessagingComponentFactory เด’เดฐเต เดฐเต€เดคเดฟ เด‰เดฃเตเดŸเต CreateMessageReceiverเด…เดคเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เด•เตเดฏเต‚เดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเตเดตเต€เด•เตผเดคเตเดคเดพเดตเดฟเดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚:

using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
    var message = receiver.Receive();
}

เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เด…เดคเต‡ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต IMessagingComponentFactory เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดฏเดพเดณเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•:

using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
    sender.SendMessage(new MyMessage { Value = ...});
}

เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดธเต€เดฐเดฟเดฏเดฒเตˆเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดกเดฟเดธเต€เดฐเดฟเดฏเดฒเตˆเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดฎเต‚เดจเตเดจเต เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เด“เดชเตโ€Œเดทเดจเตเด•เดณเตเดฃเตเดŸเต: เดตเต†เดฑเตเด‚ เดตเดพเดšเด•เด‚, XML, JSON, เดŽเดจเตเดจเดพเตฝ เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. IMessageSerializer ะธ IMessageDeserializer.

เด“เดฐเต‹ เด•เตเดฏเต‚ เดฎเดพเดจเต‡เดœเดฐเตเดŸเต†เดฏเตเด‚ เด…เดคเตเดฒเตเดฏเดฎเดพเดฏ เด•เดดเดฟเดตเตเด•เตพ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดถเตเดฐเดฎเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เด‰เดฆเดพ. ViennaNET.Messaging.MQSeriesQueue เดตเดพเดšเด•เด‚ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฌเตˆเดฑเตเดฑเต เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† ViennaNET.Messaging.RabbitMQQueue เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เตเด‚ เด“เตบ-เดฆเดฟ-เดซเตเดฒเตˆ เด•เตเดฏเต‚เดฏเดฟเด‚เด—เตเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. RabbitMQ-เดจเตเดณเตเดณ เดžเด™เตเด™เดณเตเดŸเต† เด…เดกเดพเดชเตเดฑเตเดฑเตผ เดฑเดพเดชเตเดชเดฑเตเด‚ RPC-เดฏเตเดŸเต† เดšเดฟเดฒ เดธเดฎเดพเดจเดคเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต: เดžเด™เตเด™เตพ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เด•เตเดฏเต‚เดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเต เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเดคเดพเดฃเต.

เด‡เดตเดฟเดŸเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เด•เดฃเด•เตเดทเตป เดธเต‚เด•เตเดทเตเดฎเดคเด•เดณเตเดณเตเดณ เด•เตเดฏเต‚เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚.

ViannaNET.CallContext

เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเดคเตเดคเดฟเดจเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด’เดฐเต‡ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเด‚ เดžเด™เตเด™เตพ เด•เตเดฏเต‚เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดธเดพเด—เดฏเตเด•เตเด•เตเดณเตเดณเดฟเตฝ. เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดฒเต‹เด—เดฟเตป, เดŽเตปเดกเต-เดŸเต-เดŽเตปเดกเต เดฒเต‹เด—เดฟเด‚เด—เดฟเดจเตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดเดกเดจเตเดฑเดฟเดซเดฏเตผ, เด‰เดฑเดตเดฟเดŸ เดเดชเดฟ เดตเดฟเดฒเดพเดธเด‚, เด…เด‚เด—เต€เด•เดพเดฐ เดกเดพเดฑเตเดฑ เดŽเดจเตเดจเดฟเดต เดชเต‹เดฒเตเดณเตเดณ เดธเดนเดพเดฏ เดกเดพเดฑเตเดฑ เดธเดจเตเดฆเต‡เดถเดคเตเดคเต‹เดŸเตŠเดชเตเดชเด‚ เด•เตˆเดฎเดพเดฑเต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดคเดฏเดฟเดฒเต‡เด•เตเด•เต เด‡เดคเต เดจเดฏเดฟเดšเตเดšเต. เดˆ เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ, เดžเด™เตเด™เตพ เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเต ViennaNET.CallContext, เดธเต‡เดตเดจเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดฐเต เด•เตเดฏเต‚ เดตเดดเดฟเดฏเต‹ Http เดตเดดเดฟเดฏเต‹ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเดฟเดฏเดคเต เดŽเดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ. เดคเตเดŸเตผเดจเตเดจเต, เด”เดŸเตเดŸเตโ€Œเด—เต‹เดฏเดฟเด‚เด—เต เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต‹ เดธเดจเตเดฆเต‡เดถเดฎเต‹ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดŽเดŸเตเดคเตเดคเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด…เด™เตเด™เดจเต†, เด…เดŸเตเดคเตเดค เดธเต‡เดตเดจเด‚ เดธเดนเดพเดฏ เดกเดพเดฑเตเดฑ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพเด•เตเด•เตเด‚ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เตเด‚ เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•