2010-07-07 8 views
0

전체적인 문제는 다음과 같습니다. WCF 서비스에 액세스하기위한 WCF dll을 만들고 싶습니다. 유일한 문제는 WCF DLL 구성 파일을 소유하고있는 응용 프로그램과 함께 사용할 때입니다. app.config 파일, WCF DLL app.config 파일이 무시됩니다. .......WCF : 프로그래밍 방식으로 인증서로 서비스 구성

이 문제를 해결하는 한 가지 방법은 내 app.config를 코드로 변환하는 것이지만 불행히도 저는 잘 모릅니다 내가하고있는 일.

아래 app.config 파일을 보면 암호화 된 값이있는 인증서를 사용하고있는 것을 볼 수 있습니다. 인코딩 된 값으로 인증서를 사용하기 때문에 번역하기가 어려워졌습니다. 이 일은 나에게 접근 방식을 배우는 것과 같습니다.

누구든지 응용 프로그램의 app.config에 액세스하는 WCF 서비스 대신 app.config를 그대로 사용할 수있는 방법에 대한 아이디어가 있습니까?

또는

사람이 C 번호에 다음의 app.config를 변환하는 방법에 대한 기사, 도구 나 조언이 있습니까?

모든 정보는 환상적 일 것입니다 ..... 감사합니다.

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="customBindingHTTP"> 
      <security authenticationMode="SecureConversation"> 
      <localClientSettings maxClockSkew="23:30:00" /> 
      <secureConversationBootstrap authenticationMode="UserNameForSslNegotiated"> 
       <localClientSettings maxClockSkew="23:30:00" /> 
      </secureConversationBootstrap> 
      </security> 
      <binaryMessageEncoding maxReadPoolSize="20000000" maxWritePoolSize="20000000" 
      maxSessionSize="20000000"> 
      <readerQuotas maxDepth="20000000" maxStringContentLength="20000000" 
       maxArrayLength="20000000" maxBytesPerRead="20000000" maxNameTableCharCount="20000000" /> 
      </binaryMessageEncoding> 
      <httpTransport maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000" 
      maxBufferSize="20000000" useDefaultWebProxy="false" /> 
     </binding> 
     <binding name="CustomBinding_ITestService"> 
      <security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation" 
      requireDerivedKeys="true" securityHeaderLayout="Strict" includeTimestamp="true" 
      keyEntropyMode="CombinedEntropy" messageProtectionOrder="SignBeforeEncryptAndEncryptSignature" 
      messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" 
      requireSecurityContextCancellation="true" requireSignatureConfirmation="false"> 
      <localClientSettings cacheCookies="true" detectReplays="true" 
       replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite" 
       replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00" 
       sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true" 
       timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" /> 
      <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00" 
       maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00" 
       negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00" 
       sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00" 
       reconnectTransportOnFailure="true" maxPendingSessions="128" 
       maxCachedCookies="1000" timestampValidityDuration="00:05:00" /> 
      <secureConversationBootstrap defaultAlgorithmSuite="Default" 
       authenticationMode="UserNameForSslNegotiated" requireDerivedKeys="true" 
       securityHeaderLayout="Strict" includeTimestamp="true" keyEntropyMode="CombinedEntropy" 
       messageProtectionOrder="SignBeforeEncryptAndEncryptSignature" 
       messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" 
       requireSecurityContextCancellation="true" requireSignatureConfirmation="false"> 
       <localClientSettings cacheCookies="true" detectReplays="true" 
       replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite" 
       replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00" 
       sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true" 
       timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" /> 
       <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00" 
       maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00" 
       negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00" 
       sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00" 
       reconnectTransportOnFailure="true" maxPendingSessions="128" 
       maxCachedCookies="1000" timestampValidityDuration="00:05:00" /> 
      </secureConversationBootstrap> 
      </security> 
      <binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
      maxSessionSize="2048"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      </binaryMessageEncoding> 
      <httpTransport manualAddressing="false" maxBufferPoolSize="524288" 
      maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
      realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
      useDefaultWebProxy="true" /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://xx.xx.xxx.xxx:xxxx/TestService/custom" 
     behaviorConfiguration="ClientCertificateBehavior" binding="customBinding" 
     bindingConfiguration="customBindingHTTP" contract="ServiceReference1.ITestService" 
     name="CustomBinding_ITestService"> 
     <identity> 
      <certificate encodedValue="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /> 
     </identity> 
     </endpoint> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="ClientCertificateBehavior"> 
      <clientCredentials> 
      <serviceCertificate> 
       <authentication certificateValidationMode="None" /> 
      </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 
+0

CodePlex의 WCF 보안 지침 - http://wcfsecurity.codeplex.com을 참조하십시오. WCF/보안 관련 모든 시나리오에 대한 단계별 솔루션을 제공합니다. –

답변

0

아래 코드는 필요한 시작을위한 좋은 시작점입니다. app.config에서 본 소수의 속성을 채우고 적절하게 설정했습니다. 당신이 WCF 서비스 호스트 객체가 있으면

CustomBinding endpointBinding = new CustomBinding(); 

SymmetricSecurityBindingElement securityElement = SecurityBindingElement.CreateUserNameForSslBindingElement(); 
securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10; 
securityElement.LocalClientSettings.MaxClockSkew = new TimeSpan(23, 30, 0); 

endpointBinding.Elements.Add(securityElement); 
endpointBinding.Elements.Add(new BinaryMessageEncodingBindingElement()); 
endpointBinding.Elements.Add(new HttpsTransportBindingElement()); 

는 인증서에 관해서 ... 당신과 같이 인증서를 추가 할 수 있습니다

host.Credentials.ServiceCertificate.Certificate = cert; 
0

은 또한 당신이로 DLL의 app.config 파일의 내용을 넣을 수 있습니다 발신자 앱의 app.config 파일

관련 문제