示例#1
0
        private NameValueCollection DescribeSingleProc(string dadName, string procName)
        {
            NameValueCollection procParams = _opc.GetParamsFromCache(dadName, procName);

            if (procParams.Count == 0)
            {
                logger.Debug("Procedure metadata not in cache, looking it up from database...");

                OracleObjectInfo ooi = ResolveName(procName);

                if (_lastError != "")
                {
                    return(procParams);
                }

                procParams = GetProcParams(ooi.SchemaName, ooi.PackageName, ooi.ObjectName);

                if (_lastError != "")
                {
                    return(procParams);
                }

                _opc.SetParamsInCache(dadName, procName, procParams);
            }
            else
            {
                logger.Debug("Found procedure metadata in cache.");
            }

            return(procParams);
        }
示例#2
0
        public bool GenerateWsdl(string serverName, string moduleName, string dadName, string procName)
        {
            OracleObjectInfo ooi = ResolveName(procName);

            List <string> functionList = new List <string>();

            string serviceName = "";

            if (ooi.PackageName.Length > 0 && ooi.ObjectName.Length == 0)
            {
                // get all the functions in the package, and get their parameters
                functionList = GetPackageFunctions(ooi.SchemaName, ooi.PackageName);
                serviceName  = StringUtil.PrettyStr(ooi.PackageName);
            }
            else
            {
                functionList.Add(ooi.ObjectName);
                serviceName = StringUtil.PrettyStr(procName) + "Service";
            }

            NameValueCollection procParams = null;

            StringBuilder sb = new StringBuilder();

            sb.Append("<?xml version='1.0' encoding='utf-8'?>");
            sb.AppendFormat("<wsdl:definitions xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' xmlns:tns='{0}' xmlns:s='http://www.w3.org/2001/XMLSchema' xmlns:soap12='http://schemas.xmlsoap.org/wsdl/soap12/' xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' targetNamespace='{0}' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' >", _dadConfig.SoapTargetNamespace);

            sb.Append("<wsdl:types>");

            sb.AppendFormat("<s:schema elementFormDefault='qualified' targetNamespace='{0}'>", _dadConfig.SoapTargetNamespace);

            foreach (string functionName in functionList)
            {
                string prettyProcName = StringUtil.PrettyStr(functionName);

                procParams = _opc.GetParamsFromCache(dadName, ooi.PackageName + "." + functionName);
                if (procParams.Count == 0)
                {
                    procParams = GetProcParams(ooi.SchemaName, ooi.PackageName, functionName);
                    _opc.SetParamsInCache(dadName, ooi.PackageName + "." + functionName, procParams);
                }

                sb.AppendFormat("<s:element name='{0}'>", prettyProcName);
                sb.Append("<s:complexType>");
                sb.Append("<s:sequence>");
                foreach (string s in procParams)
                {
                    sb.AppendFormat("<s:element minOccurs='1' maxOccurs='1' name='{0}' type='s:{1}' />", s.ToLower(), GetSoapDataType(procParams.GetValues(s)[0]));
                }
                sb.Append("</s:sequence>");
                sb.Append("</s:complexType>");
                sb.Append("</s:element>");

                sb.AppendFormat("<s:element name='{0}Response'>", prettyProcName);
                sb.Append("<s:complexType>");
                sb.Append("<s:sequence>");
                // for now, we only support returning one (string) value
                sb.AppendFormat("<s:element minOccurs='1' maxOccurs='1' name='{0}Result' nillable='true' type='s:string' />", prettyProcName);
                sb.Append("</s:sequence>");
                sb.Append("</s:complexType>");
                sb.Append("</s:element>");
            }

            sb.Append("</s:schema>");
            sb.Append("</wsdl:types>");

            foreach (string functionName in functionList)
            {
                string prettyProcName = StringUtil.PrettyStr(functionName);

                sb.AppendFormat("<wsdl:message name='{0}SoapIn'>", prettyProcName);
                sb.AppendFormat("<wsdl:part name='parameters' element='tns:{0}' />", prettyProcName);
                sb.Append("</wsdl:message>");

                sb.AppendFormat("<wsdl:message name='{0}SoapOut'>", prettyProcName);
                sb.AppendFormat("<wsdl:part name='parameters' element='tns:{0}Response' />", prettyProcName);
                sb.Append("</wsdl:message>");
            }

            sb.AppendFormat("<wsdl:portType name='{0}Soap'>", serviceName);

            foreach (string functionName in functionList)
            {
                string prettyProcName = StringUtil.PrettyStr(functionName);

                sb.AppendFormat("<wsdl:operation name='{0}'>", prettyProcName);
                sb.AppendFormat("<wsdl:input message='tns:{0}SoapIn' />", prettyProcName);
                sb.AppendFormat("<wsdl:output message='tns:{0}SoapOut' />", prettyProcName);
                sb.Append("</wsdl:operation>");
            }

            sb.Append("</wsdl:portType>");

            sb.AppendFormat("<wsdl:binding name='{0}Soap' type='tns:{0}Soap'>", serviceName);

            foreach (string functionName in functionList)
            {
                string prettyProcName = StringUtil.PrettyStr(functionName);

                sb.Append("<soap:binding transport='http://schemas.xmlsoap.org/soap/http' />");
                sb.AppendFormat("<wsdl:operation name='{0}'>", prettyProcName);
                sb.AppendFormat("<soap:operation soapAction='{0}/{1}' style='document' />", _dadConfig.SoapTargetNamespace, prettyProcName);
                sb.Append("<wsdl:input>");
                sb.Append("<soap:body use='literal' />");
                sb.Append("</wsdl:input>");
                sb.Append("<wsdl:output>");
                sb.Append("<soap:body use='literal' />");
                sb.Append("</wsdl:output>");
                sb.Append("</wsdl:operation>");
            }

            sb.Append("</wsdl:binding>");

            sb.AppendFormat("<wsdl:service name='{0}'>", serviceName);
            sb.AppendFormat("<wsdl:port name='{0}Soap' binding='tns:{0}Soap'>", serviceName);

            if (ooi.PackageName.Length > 0)
            {
                sb.AppendFormat("<soap:address location='http://{0}/{1}/{2}/{3}' />", serverName, moduleName, dadName, ooi.PackageName.ToLower());
            }
            else
            {
                sb.AppendFormat("<soap:address location='http://{0}/{1}/{2}/{3}' />", serverName, moduleName, dadName, procName);
            }
            sb.Append("</wsdl:port>");
            sb.Append("</wsdl:service>");

            sb.Append("</wsdl:definitions>");

            _wsdlBody = sb.ToString();
            return(true);
        }
示例#3
0
        private OracleObjectInfo ResolveName(string procName)
        {
            OracleObjectInfo ooi = new OracleObjectInfo();

            logger.Debug("Attempting to resolve name " + procName);

            string sql = "begin dbms_utility.name_resolve (:p_name, 1, :p_schema, :p_part1, :p_part2, :p_dblink, :p_part1_type, :p_object_number); end;";

            OracleCommand cmd = new OracleCommand(sql, _conn);

            OracleParameter p1 = cmd.Parameters.Add("p_name", OracleDbType.Varchar2, ParameterDirection.Input);

            p1.Value = procName;

            OracleParameter p2 = cmd.Parameters.Add("p_schema", OracleDbType.Varchar2, ParameterDirection.Output);

            p2.Size = 30;
            OracleParameter p3 = cmd.Parameters.Add("p_part1", OracleDbType.Varchar2, ParameterDirection.Output);

            p3.Size = 30;
            OracleParameter p4 = cmd.Parameters.Add("p_part2", OracleDbType.Varchar2, ParameterDirection.Output);

            p4.Size = 30;
            OracleParameter p5 = cmd.Parameters.Add("p_dblink", OracleDbType.Varchar2, ParameterDirection.Output);

            p5.Size = 30;
            OracleParameter p6 = cmd.Parameters.Add("p_part1_type", OracleDbType.Varchar2, ParameterDirection.Output);

            p6.Size = 30;
            OracleParameter p7 = cmd.Parameters.Add("p_object_number", OracleDbType.Int32, ParameterDirection.Output);

            logger.Debug("Executing SQL: " + cmd.CommandText);

            try
            {
                cmd.ExecuteNonQuery();
                _lastError = "";


                if (p2.Status == OracleParameterStatus.NullFetched)
                {
                    ooi.SchemaName = "";
                }
                else
                {
                    ooi.SchemaName = (string)(OracleString)p2.Value;
                }

                if (p3.Status == OracleParameterStatus.NullFetched)
                {
                    ooi.PackageName = "";
                }
                else
                {
                    ooi.PackageName = (string)(OracleString)p3.Value;
                }

                if (p4.Status == OracleParameterStatus.NullFetched)
                {
                    ooi.ObjectName = "";
                }
                else
                {
                    ooi.ObjectName = (string)(OracleString)p4.Value;
                }

                ooi.ObjectType = (string)(OracleString)p6.Value;
                ooi.ObjectId   = (int)(OracleDecimal)p7.Value;
            }
            catch (OracleException e)
            {
                logger.Error("Command failed: " + e.Message);
                _lastError = e.Message;
            }

            return(ooi);
        }