0

On a Windows Server 2012 machine, I have a local DTC and a clustered DTC, as you can see here:

Component Services showing local and clustered DTC

Here you can see the clustered DTC in the Failover Cluster Manager:

Failover Cluster Manager showing DTC resource

I have enabled WS-AT with the following command on the clustered DTC:

wsatconfig -network:enable -endpointCert:7c6361568413852afb471d5f8b92604cdde530dd -accountsCerts:3bcf068b0b984d2af9d2efa03e8a489c8483ba11 -virtualServer:ftsappdev -restart

For the endpointCert, I gave the thumbprint of the certificate for ftsappdev (the cluster role), and for accountscerts, I gave the thumbprint of the certificate of a JBOSS server.

I also have configured WS-AT for the local DTC through the WS-AT tab in Component Services:

Component Services DTC node WS-AT tab

In Failover Cluster Manager, when I take the clustered DTC resource offline and then online, I get the following entry in the Eventviewer/Application:

The MSDTC WS-AT protocol failed at the beginning of recovery. As a result, WS-AT functionality will be disabled.
 Protocol ID: c05b9cad-ab24-4bb3-9440-3548fa7b4b1b
 Protocol Name: WS-AtomicTransaction 1.1
 Exception: Microsoft.Transactions.Bridge.PluggableProtocolException: A channel factory could not be opened. ---> Microsoft.Transactions.Wsat.Messaging.MessagingInitializationException: A channel factory could not be opened. ---> System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL https://+:2372/WsatService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied
   at System.Net.HttpListener.AddAllPrefixes()
   at System.Net.HttpListener.Start()
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
   --- End of inner exception stack trace ---
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
   at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
   at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
   at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.HttpChannelListener`1.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.LayeredChannelListener`1.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.DatagramChannelDemuxer`2.OnOuterListenerOpen(ChannelDemuxerFilter filter, IChannelListener listener, TimeSpan timeout)
   at System.ServiceModel.Channels.SingletonChannelListener`3.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.InternalDuplexChannelFactory.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelFactory.TypedServiceChannelFactory`1.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.ChannelFactory.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at Microsoft.Transactions.Wsat.Messaging.CoordinationService.OpenChannelFactory[T](ChannelFactory`1 cf)
   --- End of inner exception stack trace ---
   at Microsoft.Transactions.Wsat.Messaging.CoordinationService.OpenChannelFactory[T](ChannelFactory`1 cf)
   at Microsoft.Transactions.Wsat.Messaging.CoordinationService.Initialize(CoordinationServiceConfiguration config)
   at Microsoft.Transactions.Wsat.Messaging.CoordinationService..ctor(CoordinationServiceConfiguration config, ProtocolVersion protocolVersion)
   at Microsoft.Transactions.Wsat.Protocol.ProtocolState.RecoveryBeginning()
   --- End of inner exception stack trace ---
   at Microsoft.Transactions.Wsat.Protocol.ProtocolState.RecoveryBeginning()
   at Microsoft.Transactions.Wsat.InputOutput.TransactionManagerReceive.RecoveryBeginning()
 Process Name: msdtc
 Process ID: 12248

Event viewer showing entry upon clustered DTC restart

In Component Services, when I restart the local DTC I get the following entry in the Eventviewer/Application:

The WS-AT protocol service successfully completed startup and recovery.
 Protocol ID: cc228cf4-a9c8-43fc-8281-8565eb5889f2
 Protocol Name: WS-AtomicTransaction 1.0
 Process Name: msdtc
 Process ID: 7744

Event viewer showing entry upon local DTC restart

Both DTCs run under the user Network Service:

Component services, Services node, showing DTC services

Task manager showing MSDTC processes

  1. Why does the clustered DTC not have access rights to this namespace, whereas the local DTC has? Both run under the same user.
  2. How can I make the clustered DTC to register the URL https://+:2372/WsatService/ successfully?
4

1 回答 1

0

我终于使用了 8444 端口。我不得不用命令保留它:

netsh http add urlacl url=https://+:8444/ user=Everyone

然后我运行 wsatonfig 指定端口 8444:

wsatconfig -network:enable -port:8444 -accounts:Everyone -endpointcert:7c6361568413852afb471d5f8b92604cdde530dd -accountsCerts:7c6361568413852afb471d5f8b92604cdde530dd,83112f9b598c4341b3975aba413bf04eb71eb679 -traceLevel:ALL -restart

还有一次,它有助于在本地 DTC 和集群 DTC 的属性中禁用和重新启用网络 DTC 访问:

禁用本地 DTC,应用并确定:

禁用本地 DTC

启用本地 DTC,应用并确定:

启用本地 DTC

禁用集群 DTC,应用并确定:

禁用集群 DTC

启用集群 DTC,应用并确定:

启用集群 DTC

于 2022-01-18T12:38:01.147 回答