Answered WCF CustomBinding dynamically

  • Sunday, May 17, 2009 6:45 PM
     
      Has Code
    Hello,
    Is it posible to configure customBinding dynamically in code not in app.config file?
    My customBindig looks now like:
    <customBinding>
      <binding name="MyBinding" closeTimeout="00:01:00"
              openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
        <textMessageEncoding messageVersion="Soap11">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </textMessageEncoding>
        <security authenticationMode="UserNameOverTransport" includeTimestamp="false">
        </security>
        <httpsTransport></httpsTransport>
      </binding>
    </customBinding>
    
    But i would like to configure that from code...  please help

All Replies

  • Sunday, May 17, 2009 7:59 PM
     
     Answered Has Code
    Hi,

    It'll look like

    BindingElementCollection outputBec = new BindingElementCollection();
    
    // <httpsTransport></httpsTransport>
    HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();
    outputBec.Add(httpsTransport);
    
    TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement();
    outputBec.Add(textMessageEncoding);
    
    // <textMessageEncoding messageVersion="Soap11">
    textMessageEncoding.MessageVersion = MessageVersion.Soap11;
    
    /*
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    */
    textMessageEncoding.ReaderQuotas.MaxDepth = 32;
    textMessageEncoding.ReaderQuotas.MaxStringContentLength = 8192;
    textMessageEncoding.ReaderQuotas.MaxArrayLength = 16384;
    textMessageEncoding.ReaderQuotas.MaxBytesPerRead = 4096;
    textMessageEncoding.ReaderQuotas.MaxNameTableCharCount = 16384;
    
    // <security authenticationMode="UserNameOverTransport" includeTimestamp="false">
    //  </security>
    TransportSecurityBindingElement security = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
    
    security.IncludeTimestamp = false;
    
    outputBec.Add(security);
    
    CustomBinding binding = new CustomBinding(outputBec);
    
    /*
     <binding name="MyBinding" closeTimeout="00:01:00"
    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
    */
    binding.CloseTimeout = TimeSpan.Parse("00:01:00");
    binding.OpenTimeout = TimeSpan.Parse("00:01:00");
    binding.ReceiveTimeout = TimeSpan.Parse("00:10:00");
    binding.SendTimeout = TimeSpan.Parse("00:01:00");
    binding.Name = "MyBinding";

    Regards
    • Marked As Answer by Albin123 Wednesday, May 20, 2009 7:10 PM
    •  
  • Wednesday, May 20, 2009 7:10 PM
     
      Has Code
    That works! Great thanks!