/// <summary> /// Composes an address from parts. /// </summary> /// <param name="protocol"></param> /// <param name="host"></param> /// <param name="port"></param> /// <param name="pathOnServer"></param> /// <returns></returns> public static string ComposeAddress(string protocol, string host, int port, string pathOnServer, WCFBinding binding) { string _protocol = "<none>"; string _host = "<none>"; if (protocol != string.Empty) _protocol = protocol; if (host != string.Empty) _host = host; string portPart = String.Format(":{0}", port.ToString()); if (_protocol == "http" && port == 80) portPart = string.Empty; if (binding == WCFBinding.NetNamedPipeBinding) portPart = string.Empty; return string.Format("{0}://{1}{3}/{2}", _protocol, //0 _host, //1 pathOnServer.TrimStart('/'), //2 portPart //3 ); }
/// <summary> /// Get the default binding for the protocol. /// </summary> /// <param name="protocol"></param> /// <returns></returns> public static WCFBinding GetDefaultBindingForProtocol(string protocol) { WCFBinding ret = WCFBinding.None; switch (protocol) { case ProtocolHttp: ret = WCFBinding.BasicHttpBinding; break; case ProtocolHttps: ret = WCFBinding.BasicHttpBinding; break; case ProtocolMSMQ: ret = WCFBinding.NetMsmqBinding; break; case ProtocolNamedPipes: ret = WCFBinding.NetNamedPipeBinding; break; case ProtocolP2P: ret = WCFBinding.NetPeerTcpBinding; break; case ProtocolTcp: ret = WCFBinding.NetTcpBinding; break; } return(ret); }
/// <summary> /// Gets the default protocol for the binding. /// </summary> /// <remarks>Some bindings can have multiple protocol http, https. This is just the default protocol for binding.</remarks> /// <param name="binding"></param> /// <returns>Protocol name that can be used directly in address of the end point</returns> public static string GetDefaultProtocolForBinding(WCFBinding binding) { string ret = string.Empty; switch (binding) { case WCFBinding.BasicHttpBinding: ret = ProtocolHttp; break; case WCFBinding.MsmqIntegrationBinding: ret = ProtocolMSMQ; break; case WCFBinding.NetMsmqBinding: ret = ProtocolMSMQ; break; case WCFBinding.NetNamedPipeBinding: ret = ProtocolNamedPipes; break; case WCFBinding.NetPeerTcpBinding: ret = ProtocolP2P; break; case WCFBinding.NetTcpBinding: ret = ProtocolTcp; break; case WCFBinding.WSDualHttpBinding: ret = ProtocolHttp; break; case WCFBinding.WSFederationHttpBinding: ret = ProtocolHttp; break; case WCFBinding.WSHttpBinding: ret = ProtocolHttp; break; } return(ret); }
/// <summary> /// Gets the full WCF addres from internal data. /// </summary> /// <param name="host"></param> /// <param name="localAddressPart"></param> /// <param name="port"></param> /// <param name="protocol"></param> /// <param name="binding"></param> /// <returns></returns> public static string GetCustomWCFAddress(string host, string localAddressPart, int port, string protocol, WCFBinding binding) { return(Utility.WCFUtils.ComposeAddress(protocol, host, port, localAddressPart, binding)); }
/// <summary> /// Composes an address from parts. /// </summary> /// <param name="protocol"></param> /// <param name="host"></param> /// <param name="port"></param> /// <param name="pathOnServer"></param> /// <returns></returns> public static string ComposeAddress(string protocol, string host, int port, string pathOnServer, WCFBinding binding) { string _protocol = "<none>"; string _host = "<none>"; if (protocol != string.Empty) { _protocol = protocol; } if (host != string.Empty) { _host = host; } string portPart = String.Format(":{0}", port.ToString()); if (_protocol == "http" && port == 80) { portPart = string.Empty; } if (binding == WCFBinding.NetNamedPipeBinding) { portPart = string.Empty; } return(string.Format("{0}://{1}{3}/{2}", _protocol, //0 _host, //1 pathOnServer.TrimStart('/'), //2 portPart //3 )); }
/// <summary> /// Retuns the newly constructed and configured WCF bindig derived class instance of the specified type. /// </summary> /// <remarks> /// This function might get more important if other WCF bingis are supported. /// All settings to a specific binding shuld be made here. /// All binding are probably not needed. /// </remarks> /// <param name="endPoint">EndPoint entity containig iformation about, what type of binding to return and how to set it.</param> /// <returns>The new configured binding element.</returns> public static System.ServiceModel.Channels.Binding GetWCFBinding(EndPoint endPoint) { if (endPoint.RemotingMechanism == RemotingMechanism.TcpBinary) { return(null); } System.ServiceModel.Channels.Binding ret = null; WCFBinding bindingEnum = endPoint.Binding; switch (bindingEnum) { #region BasicHttpBinding case WCFBinding.BasicHttpBinding: { //WARNING: untested code System.ServiceModel.BasicHttpBinding bhb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: bhb = new System.ServiceModel.BasicHttpBinding(); bhb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; bhb.MaxReceivedMessageSize = Int32.MaxValue; bhb.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: bhb = new System.ServiceModel.BasicHttpBinding(endPoint.BindingConfigurationName); break; } ret = bhb; break; } #endregion #region MsmqIntegrationBinding case WCFBinding.MsmqIntegrationBinding: { //WARNING: untested code System.ServiceModel.MsmqIntegration.MsmqIntegrationBinding mib = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: mib = new System.ServiceModel.MsmqIntegration.MsmqIntegrationBinding(); mib.Security.Mode = System.ServiceModel.MsmqIntegration.MsmqIntegrationSecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: mib = new System.ServiceModel.MsmqIntegration.MsmqIntegrationBinding(endPoint.BindingConfigurationName); break; } ret = mib; break; } #endregion #region NetMsmqBinding case WCFBinding.NetMsmqBinding: { //WARNING: untested code System.ServiceModel.NetMsmqBinding nmb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: nmb = new System.ServiceModel.NetMsmqBinding(); nmb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; nmb.Security.Mode = System.ServiceModel.NetMsmqSecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: nmb = new System.ServiceModel.NetMsmqBinding(endPoint.BindingConfigurationName); break; } ret = nmb; break; } #endregion #region NetNamedPipeBinding case WCFBinding.NetNamedPipeBinding: { //WARNING: untested code System.ServiceModel.NetNamedPipeBinding nnpb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: nnpb = new System.ServiceModel.NetNamedPipeBinding(); nnpb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; nnpb.Security.Mode = System.ServiceModel.NetNamedPipeSecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: nnpb = new System.ServiceModel.NetNamedPipeBinding(endPoint.BindingConfigurationName); break; } ret = nnpb; break; } #endregion #region NetPeerTcpBinding case WCFBinding.NetPeerTcpBinding: { //WARNING: untested code System.ServiceModel.NetPeerTcpBinding nptb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: nptb = new System.ServiceModel.NetPeerTcpBinding(); nptb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; nptb.Security.Mode = System.ServiceModel.SecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: nptb = new System.ServiceModel.NetPeerTcpBinding(endPoint.BindingConfigurationName); break; } ret = nptb; break; } #endregion #region NetTcpBinding case WCFBinding.NetTcpBinding: { System.ServiceModel.NetTcpBinding ntb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: ntb = new System.ServiceModel.NetTcpBinding(); ntb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; ntb.MaxReceivedMessageSize = Int32.MaxValue; ntb.Security.Mode = System.ServiceModel.SecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: ntb = new System.ServiceModel.NetTcpBinding(endPoint.BindingConfigurationName); break; } ret = ntb; break; } #endregion #region WSDualHttpBinding case WCFBinding.WSDualHttpBinding: { //WARNING: untested code System.ServiceModel.WSDualHttpBinding wdhb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: wdhb = new System.ServiceModel.WSDualHttpBinding(); wdhb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; wdhb.Security.Mode = System.ServiceModel.WSDualHttpSecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: wdhb = new System.ServiceModel.WSDualHttpBinding(endPoint.BindingConfigurationName); break; } ret = wdhb; break; } #endregion #region WSFederationHttpBinding case WCFBinding.WSFederationHttpBinding: { //WARNING: untested code System.ServiceModel.WSFederationHttpBinding wfhb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: wfhb = new System.ServiceModel.WSFederationHttpBinding(); wfhb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; break; case WCFBindingSettingType.UseConfigFile: wfhb = new System.ServiceModel.WSFederationHttpBinding(endPoint.BindingConfigurationName); break; } ret = wfhb; break; } #endregion #region WSHttpBinding case WCFBinding.WSHttpBinding: { System.ServiceModel.WSHttpBinding whb = null; switch (endPoint.BindingSettingType) { case WCFBindingSettingType.Default: whb = new System.ServiceModel.WSHttpBinding(); whb.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; whb.MaxReceivedMessageSize = Int32.MaxValue; whb.Security.Mode = System.ServiceModel.SecurityMode.None; break; case WCFBindingSettingType.UseConfigFile: whb = new System.ServiceModel.WSHttpBinding(endPoint.BindingConfigurationName); break; } ret = whb; break; } #endregion } return(ret); }
/// <summary> /// Gets the default protocol for the binding. /// </summary> /// <remarks>Some bindings can have multiple protocol http, https. This is just the default protocol for binding.</remarks> /// <param name="binding"></param> /// <returns>Protocol name that can be used directly in address of the end point</returns> public static string GetDefaultProtocolForBinding(WCFBinding binding) { string ret = string.Empty; switch (binding) { case WCFBinding.BasicHttpBinding: ret = ProtocolHttp; break; case WCFBinding.MsmqIntegrationBinding: ret = ProtocolMSMQ; break; case WCFBinding.NetMsmqBinding: ret = ProtocolMSMQ; break; case WCFBinding.NetNamedPipeBinding: ret = ProtocolNamedPipes; break; case WCFBinding.NetPeerTcpBinding: ret = ProtocolP2P; break; case WCFBinding.NetTcpBinding: ret = ProtocolTcp; break; case WCFBinding.WSDualHttpBinding: ret = ProtocolHttp; break; case WCFBinding.WSFederationHttpBinding: ret = ProtocolHttp; break; case WCFBinding.WSHttpBinding: ret = ProtocolHttp; break; } return ret; }
/// <summary> /// Gets the full WCF addres from internal data. /// </summary> /// <param name="host"></param> /// <param name="localAddressPart"></param> /// <param name="port"></param> /// <param name="protocol"></param> /// <param name="binding"></param> /// <returns></returns> public static string GetCustomWCFAddress(string host, string localAddressPart, int port, string protocol, WCFBinding binding) { return Utility.WCFUtils.ComposeAddress(protocol, host, port, localAddressPart, binding); }