IT:AD:WCF:HowTo:Create a Client Connection with no config file settings
Situation
A client proxy is required in a scenario where there is no clear config file to update. Eg: a K2 workflow process.
Solution
One solution is to create a Code config object.
Kelvin did a hack as follows:
public static WSHttpBinding CreateWsHttpBinding(HttpBindingConfig configuration) { // new WSHttpBinding { Security = { Mode = SecurityMode.Message, Transport = { ClientCredentialType = HttpClientCredentialType.Windows } } } // todo what should the binding values be here? WSHttpBinding binding = new WSHttpBinding { Security = { Mode = SecurityMode.Message, Transport = { ClientCredentialType = HttpClientCredentialType.Windows } } }; binding.OpenTimeout = configuration.OpenTimeout; binding.SendTimeout = configuration.SendTimeout; binding.ReceiveTimeout = configuration.ReceiveTimeout; binding.CloseTimeout = configuration.CloseTimeout; // The following are default values for a Binding binding.AllowCookies = false; binding.BypassProxyOnLocal = false; binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; //binding.MaxBufferSize = 65536; binding.MaxBufferPoolSize = 524288; binding.MaxReceivedMessageSize = 65536; binding.MessageEncoding = WSMessageEncoding.Text; binding.TextEncoding = Encoding.UTF8; //binding.TransferMode = TransferMode.Buffered; binding.UseDefaultWebProxy = true; System.Xml.XmlDictionaryReaderQuotas readerQuotas = new System.Xml.XmlDictionaryReaderQuotas(); readerQuotas.MaxStringContentLength = 8192; readerQuotas.MaxArrayLength = 16384; readerQuotas.MaxBytesPerRead = 4096; readerQuotas.MaxDepth = 32; readerQuotas.MaxNameTableCharCount = 16384; binding.ReaderQuotas = readerQuotas; return binding; } public static BasicHttpBinding CreateBasicHttpBinding(string endPointAddress, HttpBindingConfig configuration) { BasicHttpBinding binding = new BasicHttpBinding(endPointAddress.ToLower().StartsWith("https") ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None); binding.OpenTimeout = configuration.OpenTimeout; binding.SendTimeout = configuration.SendTimeout; binding.ReceiveTimeout = configuration.ReceiveTimeout; binding.CloseTimeout = configuration.CloseTimeout; // The following are default values for a Binding binding.AllowCookies = false; binding.BypassProxyOnLocal = false; binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; binding.MaxBufferSize = 65536; binding.MaxBufferPoolSize = 524288; binding.MaxReceivedMessageSize = 65536; binding.MessageEncoding = WSMessageEncoding.Text; binding.TextEncoding = Encoding.UTF8; binding.TransferMode = TransferMode.Buffered; binding.UseDefaultWebProxy = true; System.Xml.XmlDictionaryReaderQuotas readerQuotas = new System.Xml.XmlDictionaryReaderQuotas(); readerQuotas.MaxStringContentLength = 8192; readerQuotas.MaxArrayLength = 16384; readerQuotas.MaxBytesPerRead = 4096; readerQuotas.MaxDepth = 32; readerQuotas.MaxNameTableCharCount = 16384; binding.ReaderQuotas = readerQuotas; return binding; }
That he then used to create:
WsBinding = WcfUtil.CreateWsHttpBinding(bindingConfig); BaseAddress = new Uri(endpointAddress);