【问题标题】:How can I convert this app.config WCF Client configuration to code?如何将此 app.config WCF 客户端配置转换为代码?
【发布时间】:2012-06-06 21:23:18
【问题描述】:

我已经获得了以下 app.config 条目,但是我希望在我的应用程序中将此作为代码,以便更好地理解 WCF。

是否有转换器,或者有人可以提供代码。谢谢。

 <system.serviceModel>
    <client>
      <endpoint name="QA" address="https://subdomain1.theirdomain.com/5067/Sample1"
      behaviorConfiguration="WSSecBehavior" binding="customBinding"
      bindingConfiguration="Soap11_Secure"
      contract="star.starTransportPortTypes" />
      <endpoint name="PROD" address="https://subdomain1.theirdomain.com/5067/Sample1"
      behaviorConfiguration="WSSecBehavior" binding="customBinding"
      bindingConfiguration="Soap11_Secure"
      contract="star.starTransportPortTypes" />
    </client>
    <bindings>
      <customBinding>
        <binding name="Soap11_Secure">
          <textMessageEncoding messageVersion="Soap11" />
          <security defaultAlgorithmSuite="Basic128Rsa15"
          allowSerializedSigningTokenOnReply="true"
          authenticationMode="MutualCertificate"
          messageProtectionOrder="SignBeforeEncrypt"
          messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
          </security>
          <httpsTransport maxBufferSize="5000000"
          maxReceivedMessageSize="5000000" />
        </binding>
      </customBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WSSecBehavior">
          <clientCredentials>
            <clientCertificate storeLocation="CurrentUser"
            storeName="My" x509FindType="FindBySubjectName"
            findValue="*.mydomain.org.uk" />
            <serviceCertificate>
              <!-- you my have to add this if your client cannot check revocations -->
              <authentication revocationMode="NoCheck" />
              <scopedCertificates>
                <add targetUri="https://subdomain1.theirdomain.com/Sample1"
                storeName="AddressBook"
                x509FindType="FindBySubjectName"
                findValue="subdomain1.theirdomain.com" />
              </scopedCertificates>
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

到目前为止,我有这个:

    Dim asbe As New Channels.AsymmetricSecurityBindingElement

    asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
    asbe.DefaultAlgorithmSuite = Security.SecurityAlgorithmSuite.Basic128Rsa15  'By default, AES-128 is used as the encryption algorithm.
    asbe.AllowSerializedSigningTokenOnReply = True
    asbe.InitiatorTokenParameters = New ServiceModel.Security.Tokens.X509SecurityTokenParameters
    asbe.RecipientTokenParameters = New ServiceModel.Security.Tokens.X509SecurityTokenParameters
    asbe.MessageProtectionOrder = Security.MessageProtectionOrder.SignBeforeEncrypt

    'Add the elements to the custom binding
    Dim myBinding As New CustomBinding

    'element order is important - see http://msdn.microsoft.com/en-us/library/ms733893(v=vs.90).aspx

    'Protocol Binding Elements (security)
    myBinding.Elements.Add(asbe)

    'Encoding Binding Element  
    myBinding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap11, System.Text.Encoding.UTF8))

    'Transport Binding Element
    Dim httpsBindingElement As New HttpsTransportBindingElement()
    httpsBindingElement.MaxBufferSize = 5000000
    httpsBindingElement.MaxReceivedMessageSize = 5000000

    myBinding.Elements.Add(httpsBindingElement)

    Dim epi As EndpointIdentity = EndpointIdentity.CreateDnsIdentity("subdomain.theirdomain.com")

    Dim epuri As Uri = New Uri("https://subsomain1.theirdomain.com/5067/ProcessRepairOrder")
    Dim ea As New EndpointAddress(epuri, epi, New AddressHeaderCollection)

    ' Create the client. 
    Dim starClientProxy As New wcfStarServiceProxy.starTransportPortTypesClient(myBinding, ea)

    ' Specify a certificate to use for authenticating the client.

    starClientProxy.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "*.mydomain.org.uk")
    starClientProxy.ClientCredentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.CurrentUser, StoreName.AddressBook, X509FindType.FindBySubjectName, "subdomain.theirdomain.com")

    ' Begin using the client.

    Dim response As wcfStarServiceProxy.AcknowledgeRepairOrderPayload = starClientProxy.ProcessMessage(payload)

我不确定我还需要做什么。我找不到如何在 AsymmetricSecurityBindingElement 上设置 authenticationMode="MutualCertificate"。

另外,是否有任何工具可以在代码和配置之间转换并再次返回?

【问题讨论】:

    标签: .net soap app-config wcf-client ws-security


    【解决方案1】:

    不要直接创建 AsymmetricSecurityBindingElement。而是使用这样的东西:

    SecurityBindingElement.CreateMutualCertificateBindingElement
    

    【讨论】:

    • 有什么区别? - 我用上面的方法让它工作。如果我使用你建议的方法,我无法设置 AllowSerializedSigningTokenOnReply。 InitiatorTokenParameters、RecipientTokenParameters、MessageProtectionOrder。
    【解决方案2】:

    这行得通:

    Dim asbe As New Channels.AsymmetricSecurityBindingElement
    
    asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
    
    asbe.DefaultAlgorithmSuite = Security.SecurityAlgorithmSuite.Basic128Rsa15  'By default, AES-128 is used as the encryption algorithm.
    
    asbe.AllowSerializedSigningTokenOnReply = True
    
    asbe.InitiatorTokenParameters = New ServiceModel.Security.Tokens.X509SecurityTokenParameters
    asbe.RecipientTokenParameters = New ServiceModel.Security.Tokens.X509SecurityTokenParameters
    
    asbe.MessageProtectionOrder = Security.MessageProtectionOrder.SignBeforeEncrypt
    
    asbe.SetKeyDerivation(False)
    
    'Add the elements to the custom binding
    Dim myBinding As New CustomBinding
    
    'element order is important - see http://msdn.microsoft.com/en-us/library/ms733893(v=vs.90).aspx
    
    'Protocol Binding Elements (security)
    myBinding.Elements.Add(asbe)
    
    'Encoding Binding Element  
    myBinding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap11, System.Text.Encoding.UTF8))
    
    'Transport Binding Element
    Dim httpsBindingElement As New HttpsTransportBindingElement()
    'httpsBindingElement.RequireClientCertificate = True
    httpsBindingElement.MaxBufferSize = 5000000
    httpsBindingElement.MaxReceivedMessageSize = 5000000
    
    myBinding.Elements.Add(httpsBindingElement)
    
    Dim ea As New EndpointAddress("https://subdomain.theirdomain.com/5067/ProcessRepairOrder")
    
    ' Create the client. 
    Dim starClientProxy As New VHC.Server.FordWarehouse2.ServiceReference1.starTransportPortTypesClient(myBinding, ea)
    
    ' Specify a certificate to use for authenticating the client.
    
    starClientProxy.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "*.mydomain.org.uk")
    
    starClientProxy.ClientCredentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.CurrentUser, StoreName.AddressBook, X509FindType.FindBySubjectName, "subdomain.theirdomain.com")
    
    ' Begin using the client.
    Dim response As VHC.Server.FordWarehouse2.ServiceReference1.AcknowledgeRepairOrderPayload = starClientProxy.ProcessMessage(payload)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多