Although wshttpbinding only supports WS-atomictransaction, I found that when I didn't configure MSDTC to support WS-AT protocols or didn't enable WS-AT protocols, the transaction can still be normally commit and rollback. At first, I did not know why. Later I checked Microsoft's related documents and found that when wshttpbinding is used to support transactions, for efficiency reasons, WCF will first use oletx transactions, instead of the WS-at protocol. Only when the oletx protocol is unavailable, for example, port 135 is not enabled, or it is interoperable with Java Web service, can WCF fully use the WS-at protocol. This is good, but sometimes we don't want to do this (such as during testing). At this time, we can modify the registry and disable automatic upgrades of transactions to oletx transactions. Specifically, add a DWORD Value named "oletxupgradeenabled" to the Registry: HKLM \ Software \ Microsoft \ wsat \ 3.0 and set the value to 0 (1 indicates enabling automatic upgrade)