For å sitere noen andres guide: I faktisk utviklingsarbeid, kjør en hendelse, og kall deretter et annet grensesnitt for å sette inn data; hvis det er et unntak i behandlingslogikken, vil de tidligere innsatte dataene bli søppeldata, Det vi ønsker, er å kunne definere hele metoden som en transaksjon, og TransactionScope-klassen gir en enkel metode som lar deg slippe å samhandle med selve transaksjonen. å merke en kodeblokk som deltakende i en transaksjon. Objektet TransactionScope oppretter en transaksjon og setter transaksjonen til Current-egenskapen til Transaction-klassen.
1. Fordeler med TransactionScope 1. Det er mer praktisk å bruke. TransactionScope kan implementere implisitte transaksjoner, slik at du kan skrive datatilgang på lagets kode uten å ta hensyn til transaksjoner, men kontrollere transaksjoner på forretningslaget. 2. Distribuerte transaksjoner kan implementeres, som tverr-database eller MSMQ.
2. Ulemper med TransactionScope 1. Kostnadsytelsen er ikke høy. For eksempel kontrollerer du kun transaksjonene til et bibliotek i "Scope". Å bruke "TransactionScope" er litt sløsing. 2. Under normale omstendigheter, så lenge du bruker "TransactionScope", må du konfigurere MSDTC, installere en brannmur og åpne port 139. Denne porten kan ikke endres
3. Hvis du må bruke distribuerte transaksjoner, må du tenke på det 1. Må denne operasjonen være med i transaksjonen? Hvis dette steget ikke er fullført eller mislykkes, er det verdt å rulle tilbake hele transaksjonen? Finnes det ingen elegante kompensasjons- eller skyldtoleransetiltak? 2. Hvor mange punkter innebærer distribuerte transaksjoner? Må ha en lang rekke sanntidsoperasjoner? Kan du ikke effektivisere noen punkter gjennom varslingsoperasjoner? 3. Etter å ha initiert en distribuert transaksjon, utførte du transaksjonsuavhengige operasjoner, selv om disse operasjonene ikke var transaksjonsrelaterte? (f.eks. lese data, beregne, vente på at brukeren skal returnere en melding, vente på at andre moduler skal returnere anropet, osv.) 4. Du regnet vel ikke med noen leseoperasjoner i transaksjonen, gjorde du? Dette er en enkel feil å gjøre når du bruker en select-operasjon i transaksjonen. 5. Noen trinn i operasjonen din kan utføres etter at alle operasjoner er fullført. Denne typen operasjon har åpenbare varslingskarakteristikker. Varslingsoperasjoner sier: Jeg gir deg en varsling, og jeg garanterer at varslingen vil nå deg; Du må ta imot dette varselet og sørge for at det blir behandlet, men du trenger ikke å håndtere det så snart jeg varsler deg. Denne operasjonen kan åpenbart utføres med en annen oppgave.
4. Vær oppmerksom på følgende punkter når du bruker distribuerte transaksjoner 1: Sørg for at maskinen som deltar i transaksjonen har aktivert distribuert transaksjonsstøtte. 2: Hvis maskinen har brannmuren aktivert, må du sette msdtc-prosessen som et unntak. 3: Maskinen som deltar i transaksjonen kan ikke krysse domenet (hvis det er på tvers av domener, har Microsoft foreløpig ingen eksakt løsning); 4: Bruk distribuerte transaksjoner kun når du har flere databaser, hvis det er samme database, er det best å bruke SqlTransaction. 1. Legg til referansen til System.Transactions først (du må legge til Net-assembly)
Koden på C#-kallet er som følger:
Adressen til bloggene som forklarer denne distribuerte transaksjonsklassen er veldig tydelig:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html
2. Sett konfigurasjonen av webserver- og SQL-servermiljøet
Kontrollpanel - > Systemer og sikkerhet - > Administrasjonsverktøy - > komponenttjenester (Dette kreves for både WEB- og SQL-servere)
Kontrollpanel - > Systemer og sikkerhet - > Administrasjonsverktøy - > Tjenester
(Dette kreves for både WEB- og SQL-servere)
Kontrollpanel - > System og sikkerhet - > Windows-brannmur
(Dette kreves for både WEB- og SQL-servere)
3. MSSQL-konfigurasjon
For servertilkoblinger, høyreklikk – > egenskaper
4. Konfigurer verter (konfigurer kun WEB-serveren, hvis ikke, konfigurer den også på SQL-serveren)
C:\Windows\System32\drivers\etc hosts-fil, som åpnes med Notisblokk (SQL-serverinformasjon må konfigureres i Hosts-filen på WEB-serveren) (Hvis testen feiler, konfigurer informasjonen til webserveren i Hosts-filen på SQL-serveren)
|