示例#1
0
        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);
        }
示例#2
0
        //根据配置的信息获取绑定的类型。
        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);
        }
示例#3
0
        //拼接对应的终结点的地址
        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));
                }
            }
        }