ViennaNET: เจฌเฉˆเจ•เจเจ‚เจก เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸเฅค เจญเจพเจ— 2

Raiffeisenbank .NET เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ ViennaNET เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉฐเจ–เฉ‡เจช เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเจจเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ…เจธเฉ€เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ…เจคเฉ‡ เจ•เจฟเจ‰เจ‚ เจ†เจ เจนเจพเจ‚, เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพ เจญเจพเจ— เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹.

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจตเจฟเจคเจฐเจฟเจค เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจเจพเจ‚, เจ•เจคเจพเจฐเจพเจ‚ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ…เจœเฉ‡ เจคเฉฑเจ• เจตเจฟเจšเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจ•เจฟ เจธเจพเจกเฉ‡ GitHub เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ (เจธเจฐเฉ‹เจค เจ‡เฉฑเจฅเฉ‡ เจนเจจ), เจ…เจคเฉ‡ Nuget เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฑเจฅเฉ‡.

ViennaNET: เจฌเฉˆเจ•เจเจ‚เจก เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸเฅค เจญเจพเจ— 2

ViennaNET.Sagas

เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจกเฉ€เจกเฉ€เจกเฉ€ เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเฉฑเจš เจธเจตเจฟเจš เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจœเจฆเฉ‹เจ‚ เจตเจชเจพเจฐเจ• เจคเจฐเจ• เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉ‡เจตเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เฉฑเจ• เจตเจฟเจคเจฐเจฟเจค เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจ‡เฉฑเจ• เจธเจฎเฉฑเจธเจฟเจ† เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฆเฉเจฐเจฟเจธเจผ เจ…เจ•เจธเจฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเจฟเฉฑเจš เจ•เจˆ เจกเฉ‹เจฎเฉ‡เจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจคเฉเจธเฉ€เจ‚ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจตเจฟเจงเฉ€เจ†เจ‚ เจจเจพเจฒ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจจเจพเจฒ เจœเจพเจฃเฉ‚ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ, "เจฎเจพเจˆเจ•เจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจชเฉˆเจŸเจฐเจจ" เจ•เจฟเจคเจพเจฌ เจตเจฟเฉฑเจš, เจ•เฉเจฐเจฟเจธ เจฐเจฟเจšเจฐเจกเจธเจจ.

เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจชเจฐ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจตเจฟเจงเฉ€ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€ เจนเฉˆ: เจ‡เฉฑเจ• เจ—เจพเจฅเจพ, เจœเจพเจ‚ เจ‡เฉฑเจ• เจ†เจฐเจ•เฉˆเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ-เจ†เจงเจพเจฐเจฟเจค เจ—เจพเจฅเจพเฅค เจ‡เจธเจฆเจพ เจจเจฟเจšเฉ‹เฉœ เจ‡เจธ เจชเฉเจฐเจ•เจพเจฐ เจนเฉˆ: เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจ–เจพเจธ เจ•เจพเจฐเฉ‹เจฌเจพเจฐเฉ€ เจฆเฉเจฐเจฟเจธเจผ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉ‡เจตเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉเจฐเจฎเจตเจพเจฐ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉœเจพเจ… 'เจคเฉ‡ เจ•เฉ‹เจˆ เจธเจฎเฉฑเจธเจฟเจ† เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจชเจฟเจ›เจฒเฉ‡ เจธเจพเจฐเฉ‡ เจชเฉœเจพเจตเจพเจ‚ เจฒเจˆ เจฐเฉ‹เจฒเจฌเฉˆเจ• เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ, เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจนเฉˆ. เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเจพเฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจ—เจพเจฅเจพ เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจธเจซเจฒเจคเจพ เจฆเฉ€ เจชเจฐเจตเจพเจน เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚, เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจกเฉ‹เจฎเฉ‡เจจเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจ•เจธเจพเจฐ เจกเฉ‡เจŸเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจพเจกเจพ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจ…เจœเฉ‡ เจตเฉ€ เจ‡เจธเจฆเฉ‡ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจฎเฉเจธเจผเจ•เจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ: เจฌเจธ เจฌเฉ‡เจธ เจเจฌเจธเจŸเจฐเฉˆเจ•เจŸ เจ•เจฒเจพเจธ 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);

เจตเฉฑเจ–-เจตเฉฑเจ– เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจชเฉ‚เจฐเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ‡เจ–เฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจ‡เฉฑเจฅเฉ‡ เจ…เจคเฉ‡ เจจเจพเจฒ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจตเจฟเฉฑเจš เจŸเฉˆเจธเจŸ.

ViennaNET.Ormเฅค*

Nhibernate เจฆเฉเจ†เจฐเจพ เจตเฉฑเจ–-เจตเฉฑเจ– เจกเจพเจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸเฅค เจ…เจธเฉ€เจ‚ Liquibase เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ DB-เจชเจนเจฟเจฒเฉ€ เจชเจนเฉเฉฐเจš เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธเจฒเจˆ เจ‡เฉฑเจ• เจฐเฉˆเจกเฉ€เจฎเฉ‡เจก เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจธเจฟเจฐเจซ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจนเฉˆเฅค

ViennaNET.Orm.Seedwork ะธ ViennaNET.Orm - เจ•เฉเจฐเจฎเจตเจพเจฐ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจตเจพเจฒเฉ€เจ†เจ‚ เจฎเฉเฉฑเจ– เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€เจ†เจ‚เฅค เจ†เจ‰ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจตเฉ‡เจ–เฉ€เจ.

เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ IEntityFactoryService เจ…เจคเฉ‡ เจ‡เจธ เจฆเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ EntityFactoryService เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฎเฉเฉฑเจ– เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจฌเจฟเฉฐเจฆเฉ‚ เจนเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เฉฐเจฎ เจฆเฉ€ เจ‡เจ•เจพเจˆ, เจ–เจพเจธ เจ‡เจ•เจพเจˆเจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚, เจจเจพเจฒ เจนเฉ€ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเจฐ เจ…เจคเฉ‡ เจธเจฟเฉฑเจงเฉ‡ SQL เจธเจตเจพเจฒ เจ‡เฉฑเจฅเฉ‡ เจฌเจฃเจพเจ เจ—เจ เจนเจจเฅค เจ•เจˆ เจตเจพเจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ•เจฒเจพเจธ เจฆเฉ€เจ†เจ‚ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจฟเจค เจ•เจฐเจจเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ, เจธเจฟเจฐเจซ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพเฅค เจ…เจœเจฟเจนเฉ‡ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจฒเจˆ IEntityFactoryService เจ‡เฉฑเจ• เจชเฉ‚เจฐเจตเจœ - เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจนเฉˆ IEntityRepositoryFactory, เจœเฉ‹ เจ•เจฟ เจธเจฟเจฐเจซ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจขเฉฐเจ— เจฆเจพ เจเจฒเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉฑเจ• เจธเจฟเฉฑเจงเฉ‡ เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจฒเจˆ, เจชเฉเจฐเจฆเจพเจคเจพ เจตเจฟเจงเฉ€ เจตเจฐเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจนเจฐเฉ‡เจ• DBMS เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจŸเฉ€เจฎเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚ เจ‡เจธเจฆเจพ เจ†เจชเจฃเจพ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจนเฉˆ: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ•เจˆ เจชเฉเจฐเจฆเจพเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจฐเจœเจฟเจธเจŸเจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจฆเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ, เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจธเฉ‹เจงเจฃ เจฒเจˆ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ–เจฐเจšเฉ‡ เจฆเฉ‡, เจ‡เฉฑเจ• เจ•เจฆเจฎ-เจฆเจฐ-เจ•เจฆเจฎ เจฎเจพเจˆเจ—เฉเจฐเฉ‡เจธเจผเจจ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• DBMS เจฆเฉ‚เจœเฉ‡ เจจเฉ‚เฉฐ. เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจงเฉ€ เจ…เจคเฉ‡, เจ‡เจธเจฒเจˆ, เจ‡เฉฑเจ• เจ–เจพเจธ เจ‡เจ•เจพเจˆ เจ•เจฒเจพเจธ เจฒเจˆ เจชเฉเจฐเจฆเจพเจคเจพ (เจœเจฟเจธ เจฒเจˆ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจฎเฉˆเจชเจฟเฉฐเจ— เจฒเจฟเจ–เฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ) เจจเฉ‚เฉฐ BoundedContext เจ•เจฒเจพเจธ (เจกเฉ‹เจฎเฉ‡เจจ เจ‡เจ•เจพเจˆเจ†เจ‚ เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจงเฉ€ เจธเจผเจพเจฎเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ) เจœเจพเจ‚ เจ‡เจธเจฆเฉ‡ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจตเจฟเฉฑเจš เจ‡เจ•เจพเจˆ เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฆเฉเจ†เจฐเจพ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค 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.* เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจชเฉ‚เจฐเฉ€ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจฎเจฟเจฒ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจ‡เฉฑเจฅเฉ‡.

ViennaNET.เจฎเฉˆเจธเฉ‡เจœเจฟเฉฐเจ—เฅค*

เจ•เจคเจพเจฐเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸเฅค

เจ•เจคเจพเจฐเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, เจตเฉฑเจ–-เจตเฉฑเจ– DBMSs เจฆเฉ‡ เจจเจพเจฒ เจ‰เจนเฉ€ เจชเจนเฉเฉฐเจš เจšเฉเจฃเฉ€ เจ—เจˆ เจธเฉ€, เจ…เจฐเจฅเจพเจค, เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเฉฐเจญเจพเจตเจฟเจค เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจชเจนเฉเฉฐเจš, เจญเจพเจตเฉ‡เจ‚ เจ•เจคเจพเจฐ เจชเฉเจฐเจฌเฉฐเจงเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉ‹เจตเฉ‡เฅค เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ 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 เจฆเฉ‡ เจ•เฉเจ เจธเจฎเจพเจจ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ: เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจ…เจธเจฅเจพเจˆ เจ•เจคเจพเจฐ เจคเฉ‹เจ‚ เจœเจตเจพเจฌ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจœเจตเจพเจฌ เจธเฉฐเจฆเฉ‡เจธเจผ เจฒเจˆ เจฌเจฃเจพเจˆ เจ—เจˆ เจนเฉˆเฅค

เจ‡เฉฑเจฅเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเฉ‚เจ–เจฎเจคเจพ เจจเจพเจฒ เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ.

ViennaNET.CallContext

เจ…เจธเฉ€เจ‚ เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจพ เจธเจฟเจฐเจซเจผ เจตเฉฑเจ–-เจตเฉฑเจ– เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจตเจฟเจšเจ•เจพเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจฒเจˆ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจธเจ—เฉ‹เจ‚ เจ‡เฉฑเจ•เฉ‹ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจตเจฟเจšเจ•เจพเจฐ เจธเฉฐเจšเจพเจฐ เจฒเจˆ เจตเฉ€ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจ—เจพเจฅเจพ เจฆเฉ‡ เจ…เฉฐเจฆเจฐเฅค เจ‡เจธ เจจเจพเจฒ เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ‡ เจจเจพเจฒ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจชเฉˆเจฆเจพ เจนเฉ‹เจˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเฉŒเจ—เจ‡เจจ, เจ…เฉฐเจค-เจคเฉ‹เจ‚-เจ…เฉฐเจค เจฒเฉŒเจ—เจฟเฉฐเจ— เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€ เจชเจ›เจพเจฃเจ•เจฐเจคเจพ, เจธเจฐเฉ‹เจค IP เจชเจคเจพ เจ…เจคเฉ‡ เจชเฉเจฐเจฎเจพเจฃเฉ€เจ•เจฐเจจ เจกเฉ‡เจŸเจพเฅค เจ‡เจธ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจซเจพเจฐเจตเจฐเจกเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเฉ€ เจนเฉˆ ViennaNET.CallContext, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจตเจพเจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจคเฉ‹เจ‚ เจกเจพเจŸเจพ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจฌเฉ‡เจจเจคเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€, เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจฐเจพเจนเฉ€เจ‚ เจœเจพเจ‚ Http เจฆเฉเจ†เจฐเจพ, เจ•เฉ‹เจˆ เจซเจผเจฐเจ• เจจเจนเฉ€เจ‚ เจชเฉˆเจ‚เจฆเจพเฅค เจซเจฟเจฐ, เจ†เจŠเจŸเจ—เฉ‹เจ‡เฉฐเจ— เจฌเฉ‡เจจเจคเฉ€ เจœเจพเจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจญเฉ‡เจœเจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเฉฐเจฆเจฐเจญ เจคเฉ‹เจ‚ เจฒเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจ…เจ—เจฒเฉ€ เจธเฉ‡เจตเจพ เจธเจนเจพเจ‡เจ• เจกเฉ‡เจŸเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจ‰เจธเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ, เจ…เจธเฉ€เจ‚ เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚!

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹