Hallo .NET devvers,
De volgende sitatie:
Services op development PC
+ Clients op development PC
=> Alles werkt prima.
Na het deployen van de services in een VM (inc certificaat)
+ Clients op development PC
=> MessageSecurityException is thrown
Ik loop dan dus tegen de volgende exception aan:
"An unsecured or incorrectly secured fault was received from the other party."
Met inner exception: {"Er is een fout opgetreden bij het controleren van de beveiliging voor het bericht."}
Edit, at random wordt deze ook wel eens gegooid:
The request channel timed out while waiting for a reply after 00:00:05.3083000. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
De service is als volgt geconfigureerd:
De client is als volgt geconfigureerd:
Edit: wat trace erbij;
Ik gebruik dus custom UsernamePassword en Certificate validators.
Wat er gebeurt:
- Eerste call wordt gemaakt
- Certificaat wordt gevalideerd
- Timeout periode verloopt
- Exception
Voor de duidelijkheid
- Proxies zijn actueel
- De systeem tijden lopen gelijk
- In development only omgeving werkt het wel
Waar gaat het mis?
De volgende sitatie:
Services op development PC
+ Clients op development PC
=> Alles werkt prima.
Na het deployen van de services in een VM (inc certificaat)
+ Clients op development PC
=> MessageSecurityException is thrown
Ik loop dan dus tegen de volgende exception aan:
"An unsecured or incorrectly secured fault was received from the other party."
Met inner exception: {"Er is een fout opgetreden bij het controleren van de beveiliging voor het bericht."}
Edit, at random wordt deze ook wel eens gegooid:
The request channel timed out while waiting for a reply after 00:00:05.3083000. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
De service is als volgt geconfigureerd:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| Dim oBinding As New WSHttpBinding() With oBinding .Security.Mode = SecurityMode.Message .Security.Message.ClientCredentialType = MessageCredentialType.UserName .ReliableSession.Enabled = True .ReliableSession.Ordered = True .MessageEncoding = WSMessageEncoding.Text End With With oHost.Credentials .UserNameAuthentication.UserNamePasswordValidationMode = _ ServiceModel.Security.UserNamePasswordValidationMode.Custom .UserNameAuthentication.CustomUserNamePasswordValidator = New Authenticator() .ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, _ StoreName.My , X509FindType.FindBySubjectName, _ _sCertName) End With |
De client is als volgt geconfigureerd:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| Dim oService As New ServiceClient() oService.Endpoint.Address = New EndpointAddress( _ New Uri(String .Format("...address..." , _ sIpAddress, sPort)), EndpointIdentity.CreateDnsIdentity(Settings.DnsIdentity)) With oService.ClientCredentials .UserName.UserName = sUsername .UserName.Password = sPassword .ServiceCertificate.Authentication.CertificateValidationMode = _ ServiceModel.Security.X509CertificateValidationMode.Custom .ServiceCertificate.Authentication.CustomCertificateValidator = New CertValidator() End With Dim oWsBinding As WSHttpBinding = oService.Endpoint.Binding oWsBinding.ReliableSession.Enabled = True oWsBinding.ReliableSession.Ordered = True |
Edit: wat trace erbij;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| bij System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) bij System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) bij System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout) bij System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout) bij System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout) bij System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan timeout) bij System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) bij System.ServiceModel.Channels.ReliableChannelBinder`1.ChannelSynchronizer.SyncWaiter.TryGetChannel() bij System.ServiceModel.Channels.ReliableChannelBinder`1.ChannelSynchronizer.SyncWaiter.TryWait(TChannel& channel) bij System.ServiceModel.Channels.ReliableChannelBinder`1.ChannelSynchronizer.TryGetChannel(Boolean canGetChannel, Boolean canCauseFault, TimeSpan timeout, MaskingMode maskingMode, TChannel& channel) bij System.ServiceModel.Channels.ClientReliableChannelBinder`1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode) bij System.ServiceModel.Channels.RequestReliableRequestor.OnRequest(Message request, TimeSpan timeout, Boolean last) bij System.ServiceModel.Channels.ReliableRequestor.Request(TimeSpan timeout) bij System.ServiceModel.Channels.ClientReliableSession.Open(TimeSpan timeout) bij System.ServiceModel.Channels.ReliableRequestSessionChannel.OnOpen(TimeSpan timeout) bij System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) bij System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) bij System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) bij System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout) bij System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) bij System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout) bij System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) bij System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) bij System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) bij System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) |
Ik gebruik dus custom UsernamePassword en Certificate validators.
Wat er gebeurt:
- Eerste call wordt gemaakt
- Certificaat wordt gevalideerd
- Timeout periode verloopt
- Exception
Voor de duidelijkheid
- Proxies zijn actueel
- De systeem tijden lopen gelijk
- In development only omgeving werkt het wel
Waar gaat het mis?
[ Voor 37% gewijzigd door Verwijderd op 04-06-2009 15:09 ]