2014-07-23 2 views
0

나는이 (가)의 app.config에 다음과 같은 설정으로 WCF 응용 프로그램을 작성했습니다 :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 요청을 거부 바인딩에 문제가 있어요 (I 다른 서비스 그냥를 포함 시켰습니다 케이스가 효과가 있을지 모르지만 생각하지 않습니다.) 나는 다음과 같은 코드를 사용하여 인스턴스 해요 :

private ServiceHost incomingPipeHost; 
private ServiceHost incomingSubscribeHost; 

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

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

내가 로컬로 실행하는 클라이언트에서 net.tcp 서비스에 연결하려고 할 때이 모두가 잘 작동을하고, 나는 고객 사이트에서이 실행 벌금이 있었다 1 년이 넘었습니다. 그러나, 나는 다른 고객 사이트에 지금 그리고 난 내가 다음과 같은 예외가 얻을 원격 시스템에서 연결하려고 할 때 :

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

당신은 올바른 구성 (netTcpBindingConfig)를 사용하는 netTcpBinding과 끝점을 알려줄 필요가 :

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

이 덕분에 서버 측에서 보안을 해제 한 것으로 보이지만 클라이언트가 접근 한 것 같습니다 서비스를 인증 문제를 일으키는 다른 도메인에서 가져 왔습니다. 보안을 제거하기보다는이 문제를 해결할 것입니다. –

관련 문제