private static System.ServiceModel.Channels.Binding createBinding(MB.Util.Model.WcfCredentialInfo credentialInfo, bool isGZipCustomBinding, string usedbindingCfgName) { System.ServiceModel.Channels.Binding binding = null; var cfgInfo = credentialInfo; WcfServiceBindingType bindingType = getBindingType(credentialInfo); if (bindingType == WcfServiceBindingType.wsHttp) { string bindingCfgName; if (string.IsNullOrEmpty(usedbindingCfgName)) { bindingCfgName = System.Configuration.ConfigurationManager.AppSettings[HTTP_BINDING_NAME]; } else { bindingCfgName = usedbindingCfgName; } if (string.IsNullOrEmpty(bindingCfgName)) { throw new MB.Util.APPException(string.Format("wsHttp绑定需要配置{0}", HTTP_BINDING_NAME), MB.Util.APPMessageType.SysErrInfo); } //string gzip = System.Configuration.ConfigurationManager.AppSettings[ENABLE_GZIP_MESSAGE]; if (!isGZipCustomBinding) { binding = new WSHttpBinding(bindingCfgName); } else { binding = new CustomBinding(bindingCfgName); } } else if (bindingType == WcfServiceBindingType.netTcp) { string cfgName = System.Configuration.ConfigurationManager.AppSettings[TCP_BINDING_NAME]; if (string.IsNullOrEmpty(cfgName)) { throw new MB.Util.APPException(string.Format("netTcp 绑定需要配置{0}", TCP_BINDING_NAME), MB.Util.APPMessageType.SysErrInfo); } binding = new System.ServiceModel.NetTcpBinding(cfgName); } else { throw new MB.Util.APPException(string.Format("Wcf 客户端绑定目前不支持{0}", bindingType.ToString()), MB.Util.APPMessageType.SysErrInfo); } return(binding); }
//根据配置的信息获取绑定的类型。 private static WcfServiceBindingType getBindingType(MB.Util.Model.WcfCredentialInfo credentialInfo) { WcfServiceBindingType bindingType = (credentialInfo.HostType == MB.Util.Model.WcfServiceHostType.IIS || credentialInfo.HostType == MB.Util.Model.WcfServiceHostType.DEVELOPER) ? WcfServiceBindingType.wsHttp : WcfServiceBindingType.netTcp; //如果是开发环境下的话,那么根据用户配置的基地址来决定 if (credentialInfo.HostType == MB.Util.Model.WcfServiceHostType.DEVELOPER) { if (credentialInfo.BaseAddress.Length > NET_TCP_HEADER.Length) { if (string.Compare(credentialInfo.BaseAddress.Substring(0, NET_TCP_HEADER.Length), NET_TCP_HEADER, true) == 0) { bindingType = WcfServiceBindingType.netTcp; } } } return(bindingType); }
//拼接对应的终结点的地址 private static string buildEndpointAddress(MB.Util.Model.WcfCredentialInfo credentialInfo, WcfClientInvokeCfgInfo wcfClientCfgInfo) { string relativePath = wcfClientCfgInfo.RelativePath; string replaceDot = System.Configuration.ConfigurationManager.AppSettings[REPLACE_PATH_LAST_DOT]; //判断是否修改相对路径的地址 if ((!string.IsNullOrEmpty(replaceDot) && string.Compare(replaceDot, "True", true) == 0) || credentialInfo.ReplaceRelativePathLastDot) { relativePath = replaceRelativePath(relativePath); } if (!string.IsNullOrEmpty(credentialInfo.EndpointFormatString)) { var v = System.Text.RegularExpressions.Regex.Matches(credentialInfo.EndpointFormatString, @"\{\d\}"); if (v.Count != 1) { throw new MB.Util.APPException(string.Format(@"证书 的 EndpointFormatString:{0} 设置有误,只能设置一个参数", credentialInfo.EndpointFormatString), APPMessageType.SysErrInfo); } return(string.Format(credentialInfo.EndpointFormatString, relativePath)); } else { string formateString = System.Configuration.ConfigurationManager.AppSettings[END_POINT_ADD_FORMATE_STRING]; if (!string.IsNullOrEmpty(formateString)) { return(string.Format(formateString, getAbsoluteBassAddress(credentialInfo.BaseAddress), relativePath)); } else { WcfServiceBindingType bindingType = getBindingType(credentialInfo); string header = bindingType == WcfServiceBindingType.wsHttp ? HTTP_HEADER : NET_TCP_HEADER; string path = System.Configuration.ConfigurationManager.AppSettings[SERVICE_DOMAIN_NAME]; if (string.IsNullOrEmpty(path)) { throw new MB.Util.APPException(string.Format("app.config 需要配置程序域名称 {0}", SERVICE_DOMAIN_NAME), MB.Util.APPMessageType.SysErrInfo); } return(string.Format("{0}{1}/{2}/{3}", header, getAbsoluteBassAddress(credentialInfo.BaseAddress), path, relativePath)); } } }