Lainatakseni jonkun toisen opasta: Varsinaisessa kehitystyössä suorita tapahtuma ja kutsu sitten toinen rajapinta syöttämään dataa; jos käsittelylogiikassa on poikkeus, aiemmin syötetty data muuttuu roska-dataksi, Haluamme pystyä määrittelemään koko metodin transaktioksi, ja TransactionScope-luokka tarjoaa yksinkertaisen metodin, jonka avulla sinun ei tarvitse olla vuorovaikutuksessa transaktion kanssa. Merkitä koodilohko osallistuvaksi transaktioon. TransactionScope-objekti luo transaktion ja asettaa transaktion transaktio-luokan Current -ominaisuudeksi.
1. TransactionScope:n edut 1. Sen käyttö on kätevämpää. TransactionScope voi toteuttaa implisiittisiä transaktioita, jolloin voit kirjoittaa datan käyttökerroksen koodia ilman transaktioiden huomioimista, mutta ohjata liiketoimia liiketoimintakerroksessa. 2. Hajautettuja transaktioita voidaan toteuttaa, kuten tietokantarajat ylittävä tai MSMQ.
2. TransactionScope:n haitat 1. Kustannustehokkuus ei ole korkea. Esimerkiksi ohjaat vain kirjaston tapahtumia "Scope"-osiossa. "TransactionScope" on hieman tuhlaavaa. 2. Normaaleissa olosuhteissa, kunhan käytät "TransactionScopea", sinun täytyy konfiguroida MSDTC, asentaa palomuuri ja avata portti 139. Tätä porttia ei voi muuttaa
3. Jos sinun täytyy käyttää hajautettuja tapahtumia, sinun täytyy miettiä sitä 1. Täytyykö tämä operaatio olla transaktiossa? Jos tämä vaihe ei valmistu tai epäonnistuu, kannattaako koko tapahtuman peruminen takaisin? Eikö ole olemassa elegantteja kompensointi- tai vikasietokykyjä? 2. Kuinka monta pistettä hajautetut tapahtumat vaativat? Täytyykö sinulla olla suuri sarja reaaliaikaisia operaatioita? Etkö voisi virtaviivaistaa joitakin asioita ilmoitustoimintojen avulla? 3. Hajautetun transaktion aloittamisen jälkeen, suorititko transaktioriippumattomia operaatioita, vaikka nämä operaatiot eivät liittyneet transaktioihin? (esim. datan lukeminen, laskeminen, käyttäjän viestin odottaminen, muiden moduulien kutsun odottaminen jne.) 4. Et kai laskenut joitakin lukutoimintoja kauppaan? Tämä on helppo virhe, kun lisäät tapahtumaan tietyn toiminnon. 5. Jotkin toimenpiteesi vaiheet voidaan suorittaa kaikkien operaatioiden jälkeen. Tämän tyyppisellä toiminnolla on ilmeiset ilmoitusominaisuudet. Ilmoitustoiminnot sanovat, että annan sinulle ilmoituksen, ja takaan, että ilmoitus tavoittaa sinut; Teidän täytyy ottaa tämä ilmoitus ja varmistaa, että se käsitellään, mutta teidän ei tarvitse käsitellä sitä heti, kun ilmoitan teille. Tämä operaatio voidaan tietenkin tehdä toisella tehtävällä.
4. Kiinnitä huomiota seuraaviin seikkoihin hajautettuja tapahtumia käyttäessäsi 1: Varmista, että transaktioon osallistuva kone on ottanut käyttöön hajautetun transaktion tuen. 2: Jos koneessa on palomuuri päällä, sinun täytyy asettaa msdtc-prosessi poikkeukseksi. 3: Transaktioon osallistuva kone ei voi ylittää domainia (jos kyseessä on monitoimialueinen, Microsoftilla ei tällä hetkellä ole tarkkaa ratkaisua); 4: Käytä hajautettuja transaktioita vain, kun sinulla on useita tietokantoja, jos kyseessä on sama tietokanta, on parasta käyttää SqlTransactionia. 1. Lisää ensin System.Transactions-viite (sinun täytyy lisätä Net assembly)
C#-kutsun koodi on seuraava:
Blogien osoite, jotka selittävät tämän hajautetun transaktioluokan selityksen, on hyvin selkeä:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html
2. Aseta web-palvelimen ja SQL-palvelinympäristön asetukset
Ohjauspaneeli - > Järjestelmät ja turvallisuus - > hallintatyökalut - > komponenttipalvelut (Tämä vaaditaan sekä WEB- että SQL-palvelimille)
Ohjauspaneeli - > Järjestelmät ja turvallisuus - > Hallintatyökalut - > Palvelut
(Tämä vaaditaan sekä WEB- että SQL-palvelimille)
Ohjauspaneeli - > Järjestelmä ja turvallisuus - > Windowsin palomuuri
(Tämä vaaditaan sekä WEB- että SQL-palvelimille)
3. MSSQL-konfiguraatio
Palvelinyhteyksiä varten napsauta hiiren oikealla - > ominaisuuksia
4. Määritä isännät (konfiguroi vain WEB-palvelin, jos ei, konfiguroi se myös SQL-palvelimella)
C:\Windows\System32\drivers\etc isäntätiedosto, joka avataan Muistiopadilla (SQL-palvelimen tiedot täytyy konfiguroida WEB-palvelimen Hosts-tiedostossa) (Jos testi epäonnistuu, määritä web-palvelimen tiedot SQL-palvelimen Hosts-tiedostoon)
|