2014-07-23 70 views
0

我寫了一個WCF應用程序與在在app.config以下配置:如何禁用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> 

,我有與netTcp綁定拒絕請求的問題(我已經包含了其他服務只是它可能會產生影響,但我認爲它不會)。我使用下面的代碼實例是:

private ServiceHost incomingPipeHost; 
private ServiceHost incomingSubscribeHost; 

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

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

,當我嘗試連接到從客戶端在本地運行的net.tcp服務這一切工作正常,和我有對客戶網站上的這個運行良好遠超過一年。但是,我現在是在不同的客戶現場,當我嘗試從遠程機器,我得到下面的異常連接:

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() 

我試着將下面的代碼片段到system.ServiceModel禁用認證我仍然得到相同的錯誤:

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

我在做什麼錯?我可以做些什麼來嘗試禁用身份驗證(這不是必需的),或者讓身份驗證正常工作?

回答

1

你需要告訴端點的netTcpBinding使用正確的配置(netTcpBindingConfig):

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

感謝,似乎已經關閉安全在服務器端,但它看起來像客戶端被訪問來自導致身份驗證問題的其他域的服務。我要解決這個問題,而不是去除安全問題。 –