Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Transaktioner med WCF och basicHttpBinding

Postades av 2008-08-14 11:06:00 - Robin Ridderholt, i forum c# (c-sharp), Tråden har 11 Kommentarer och lästs av 1905 personer

Vi håller på och utvecklar en WCF applikation med en flerlagers lösning. Där alla serverdelar datalager, business, facade osv. ligger för sig och sedan ska vi via WCF kommunicera från våran WebClient till serverdelarna.

Det jag inte får kläm på är transaktionshanteringen. Jag har fått höra att med basicHttpBinding som vi använder kan man använda sk. interna transaktioner, men har inte fått kläm på vad det är heller.

Det jag gör är att i interfacen deklarera att transactioner är tillåtet:

[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void MyMethod(SaveContract saveContract1, SaveContract saveContract2);


Implementeringen av interfacet:
[OperationBehavior(TransactionScopeRequired = true)]
public void MyMethod(SaveContract saveContract1, SaveContract saveContract2)
{
  this.myFacade.Save(saveContract1);

  throw new Exception("Stop transaction");

  this.myFacade.Save(saveContract2);
}


Sedan har jag testat lite olika sätt från WebClient, både att inte göra något speciellt utan bara anropa servicen och MyMethod. Samt följande var det senaste jag testade:
using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required))
{
  MyClient myClient = new MyClient();

  myClient.MyMethod(myFirstSaveContract, mySecondSaveContract);

  trans.Complete();
}


Men jag får bara detta felmeddelande: Partnertransaktionshanteraren har inaktiverat sitt stöd för fjärr- och nätverkstransaktioner. (Exception from HRESULT: 0x8004D025) Har googlat på felet och fått förslag på säkerhetsinställningar för MSDTC men utan resultat.

Jag är inte helt säker men det kanske är så att vi behöver byta ut våran basicHttpBinding mot tex wsHttpBinding. Anledningen till att jag fösöker hitta en lösning med basicHttpBinding är att applikationen är ganska stor och det kommer bli ett omfattande arbeta med att byta ut alla bindings.

Någon som har haft samma problem och har en lösning eller föslag på saker jag kan prova?

/Tack!


Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-08-14 11:26:57 - Andreas Öhlund

Om det är WS-AtomicTransaction du vill använda så måste du köra wsHttpBinding (det är där alla WS-* grejjer finns).


Är ni riktigt säker på att ni behöver transaktioner som omfattar flera WCF anrop? Jag brukar föreslå att varje anrop till tjänster hanterars som en logisk enhet("Unit of work"). Något i stil med:

public void RegisterNewCustomer(RegisterNewCustomerRequest request)
{
//starta en intern transaktion för detta service-anrop
using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required))
{
//skapa rader i customer tabellen

//skapa rader i account tabell

//osv
}
}

Mao gör man anropen till "service-lagret" lite grövre. Så att man i detta fall kan man nyttja affärslogiken för att skapa nya kunder från ex. Web-UI, Fet-klient, batchar osv. Man slipper även distribuerade transaktioner vilket är bra för prestanda m.m.


Svara

Sv:Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-01 11:20:40 - Robin Ridderholt

Nu har jag trixat med detta i ca 1vecka utan framgång.

Vi har precis som Andreas beskriver här över, vi "buntar" ihop anrop till underliggande lager i en metod i servicel-lagret.

Jag har testat olika inställningar för MSDTC och har kommit så långt att jag numera får följande meddelande när jag testar transaktionerna via våran applikation: "Denna transaktionshanterare misslyckades med att ansluta till en annan TIP-transaktionshanterare. (Exception from HRESULT: 0x8004D01F)"

Googlade på detta men det tips jag hittar är att jag ska slå på "Enable TIP-transactions" i MSDTC vilket jag har gjort både på applikations-servern och SQL Servern. Jag har öppnat portar hit och dit (134,135 mfl.) men inget verkar hjälpa. Det som är mest störande är att allt fungerar i kundens miljö och jag har pratat med deras tekniker så att jag använder samma inställningar osv. men inget fungerar.

Någon som har någon idé på vad jag gör för fel? Eller inställningar som jag inte har testat?

Jag kör Win XP Pro och SQL Servern är Win Server 2003.


Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-01 12:55:51 - Andreas Öhlund

MSDTC borde inte bli inblandad då ni som ni säger har "buntat ihop" anropen så att varje anrop till WCF == lokal transaktion.

Har du tagit bort
[TransactionFlow(TransactionFlowOption.Allowed)] från ditt service kontrakt? ( för det behövs ju inte längre)


Svara

Sv:Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-01 13:32:06 - Robin Ridderholt

Nej det har jag inte gjort, testade detta nu men då blir det ingen transaktion. Jag har ett test som jag kör nu där jag sparar ett objekt och kastar sedan ett Exception och efter det så har jag ytterligare ett spara anrop som i praktiken aldrig kommer att köras. Men efter att ha tagit bort TransactionFlow-markeringen av kontrakten så sparas det första objekete i alla fall.

Anledningen ligger nog i att vi har ett genererat datalager som har genererats av WM-Datas produkt WM-Bof som i sina spara metoder har något som heter ApplyChanges(); som fungerar lite som en transaktionens motsvarighet till Commit(); Men som jag har fått förklarat för mig så ska det fungera att markera upp kontrakten med TransactionFlow osv. för att flera anrop som utför en "Commit" ska läggas under en och samma transaktion.


Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-01 14:12:46 - Andreas Öhlund

Du skpar transaktionen själv genom att köra:

using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required))
{
//anropa wm-data grejjerna
}


om dessa inte har stöd för TransactionScope så får du göra nått i sitl med:

using (var trans = new VMDataTransktionEllerVadDomNuKallarDet(TransactionScopeOption.Required))
{
//anropa wm-data grejjerna
}


[OperationBehavior(TransactionScopeRequired = true)] skall du inte ha med!



Svara

Sv:Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-01 16:14:51 - Robin Ridderholt

Provade men får fortfarande samma fel.

Det som jag tycker är mest underligt är att det fungerar fin fint i kunden miljö att använda [OperationBehavior(TransactionScopeRequired = true)]. Och det är ju bra att det fungerar där men när vi ska debugga i våran miljö så får vi det inte att fungera.


Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-02 08:26:25 - Andreas Öhlund

hmm, TransactionScopeRequired = true borde innebära samma sak som using(var tx = new TransactionScope())

Funkar debuggingen när du kör "using" varianten?

/Andreas


Svara

Sv:Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-02 10:36:04 - Robin Ridderholt

Ja den fungerar och går in i det första anropet som ska spara det första objektet men när den går in i den metoden så får jag felete med "Denna transaktionshanterare misslyckades med att ansluta till en annan TIP-transaktionshanterare. (Exception from HRESULT: 0x8004D01F)".

Felete verkar uppstå när själva sparningen ska ske, så jag ska försöka ta kontakt med WM-Data och höra med dom.

Tack för all hjälp, har du flera idéer så är dom välkommna!


Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-02 11:13:07 - Andreas Öhlund

Låter som att VM-data grejjern inte funkar med:

using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required))
{
//anropa wm-data grejjerna
}


utan kräver nån egen variant av "transaktionshantering", kolla hur man startar en transaktion manuellt med vm-datas grejjer!



PS med nhibernate blir det nått i stil med:

using (var session = SessionManager.Instance.GetSession())
using (var tx = session.BeginTransaction())
{
//Do work


tx.Commit();
}


Svara

Sv:Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-02 11:32:01 - Andreas Öhlund

En grej till som jag missade attnämna:

Då måste givetvis köra:

trans.Complete(); För att committa när du kör med TransactionScope!



Svara

Sv: Transaktioner med WCF och basicHttpBinding

Postades av 2008-09-02 20:17:50 - Robin Ridderholt

Jo då det förstod jag :) Har förresten kollat med WM-Data och det ska fungera med TransactionScope och det visste jag ju iof redan i och med att det fungerar i kundens miljö.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 707
27 958
271 751
839
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies