2014-07-23 6 views
0

J'ai écrit une application WCF avec la configuration suivante dans le app.config du:Comment désactiver la sécurité sur le service wcf?

<system.serviceModel> 
    <services> 
     <service name="ProxyService"> 
      <endpoint address="net.pipe://localhost/ProxyService" binding="netNamedPipeBinding" bindingConfiguration="" name="ServiceProxy" contract="IProxyService"/> 
     </service> 
     <service name="PublishSubscribeService"> 
     <endpoint address="net.tcp://localhost/PublishSubscribeService" binding="netTcpBinding" bindingConfiguration="" name="PublishSubscribeServer" contract="IPublishSubscribeService"/> 
     </service> 
    </services> 
</system.serviceModel> 

Je vais avoir un problème avec la demande de rejet de liaison NetTcp (je l'ai inclus l'autre service juste cas ça pourrait avoir un effet mais je ne le pense pas). J'instancier en utilisant le code suivant:

private ServiceHost incomingPipeHost; 
private ServiceHost incomingSubscribeHost; 

incomingPipeHost = new ServiceHost(typeof(ProxyService)); 
incomingPipeHost.Open(); 

incomingSubscribeHost = new ServiceHost(typeof(PublishSubscribeService)); 
incomingSubscribeHost.Open(); 

Tout cela fonctionne très bien lorsque je tente de se connecter au service net.tcp d'un client en cours d'exécution au niveau local, et je l'ai eu ce beau courir sur un site client pour bien plus d'un an. Cependant, je suis maintenant sur un site client différent et lorsque je tente de se connecter à partir d'une machine distante je reçois l'exception suivante:

System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials. ---> System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials. ---> System.ComponentModel.Win32Exception: The logon attempt failed 
    --- End of inner exception stack trace --- 
    at System.Net.Security.NegoState.ProcessReceivedBlob(Byte[] message, LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.StartReceiveBlob(LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.CheckCompletionBeforeNextReceive(LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.StartSendBlob(Byte[] message, LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.CheckCompletionBeforeNextSend(Byte[] message, LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.ProcessReceivedBlob(Byte[] message, LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.StartReceiveBlob(LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.CheckCompletionBeforeNextReceive(LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.StartSendBlob(Byte[] message, LazyAsyncResult lazyResult) 
    at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult) 
    at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, ChannelBinding binding, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel) 
    at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel) 
    at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity) 
    --- End of inner exception stack trace --- 

Server stack trace: 
    at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity) 
    at System.ServiceModel.Channels.StreamSecurityUpgradeInitiatorBase.InitiateUpgrade(Stream stream) 
    at System.ServiceModel.Channels.ConnectionUpgradeHelper.InitiateUpgrade(StreamUpgradeInitiator upgradeInitiator, IConnection& connection, ClientFramingDecoder decoder, IDefaultCommunicationTimeouts defaultTimeouts, TimeoutHelper& timeoutHelper) 
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper) 
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper) 
    at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout) 
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
    at ....PublishSubscribeServiceLibrary.IPublishSubscribeService.Subscribe(UserData userData) 
    at ....PublishSubscribeServiceLibrary.PublishSubscribeClient.Subscribe(UserData userData) 
    at ....OnConnected() 

J'ai essayé d'ajouter l'extrait suivant au system.serviceModel pour désactiver l'authentification et je reçois toujours la même erreur:

<bindings> 
    <netTcpBinding> 
     <binding name="netTcpBindingConfig" transferMode="Buffered" maxReceivedMessageSize="5242880"> 
      <readerQuotas maxArrayLength="5242880" /> 
      <security mode="None" /> 
     </binding> 
    </netTcpBinding> 
</bindings> 

Qu'est-ce que je fais mal? et que puis-je faire pour essayer de désactiver l'authentification (ce qui n'est pas obligatoire) ou de faire fonctionner l'authentification?

Répondre

1

Vous devez dire au EndPoint avec le netTcpBinding d'utiliser la configuration correcte (netTcpBindingConfig):

<service name="PublishSubscribeService"> 
    <endpoint ... bindingConfiguration="netTcpBindingConfig" ... /> 
</service> 
+0

Merci qui semble avoir désactivé la sécurité du côté du serveur, mais il semble que le client accédait à la service d'un domaine différent qui provoquait le problème d'authentification. Je vais résoudre ce problème plutôt que de supprimer la sécurité. –

Questions connexes