C# Bloomberg web service调用单个字段和单个仪器需要1分钟以上

C# Bloomberg web service调用单个字段和单个仪器需要1分钟以上,c#,soap,bloomberg,C#,Soap,Bloomberg,我正在为“债务-股权-基本面-TKR”领域发布彭博网络服务GetData。我将secmaster设置为true,并要求使用带有CUSIP标识符的单一仪器(使用yellowkey=MarketSector.Corp) 我觉得这是一个相当轻量级的电话,因为人们一次就要几千个仪器和几十个字段 我已经设置了很多不同的设置,但我就是不能在几秒钟内让这个请求返回。它为我提供了正确的返回值,但所需时间超过60秒 你知道有没有可能在几秒钟内执行并返回这样的请求 谢谢 编辑-以下是我正在运行的代码: public

我正在为“债务-股权-基本面-TKR”领域发布彭博网络服务GetData。我将secmaster设置为true,并要求使用带有CUSIP标识符的单一仪器(使用yellowkey=MarketSector.Corp)

我觉得这是一个相当轻量级的电话,因为人们一次就要几千个仪器和几十个字段

我已经设置了很多不同的设置,但我就是不能在几秒钟内让这个请求返回。它为我提供了正确的返回值,但所需时间超过60秒

你知道有没有可能在几秒钟内执行并返回这样的请求

谢谢

编辑-以下是我正在运行的代码:

public string GetFundamentalTicker(string identifier, InstrumentType identifierType = InstrumentType.CUSIP)
        {
            PerSecurityWS ps = new PerSecurityWS();
            try
            {


                log.DebugFormat("Cert path is: {0}", CertPath);                
                X509Certificate2 clientCert = new X509Certificate2(CertPath, "<password_redacted>");

                ps.ClientCertificates.Add(clientCert);
            }
            catch (Exception e)
            {
                log.ErrorFormat("Error in cert setup - {0} - {1}", e.Message, e.InnerException == null ? "" : e.InnerException.Message);
                return null;
            }
            //Set request header
            GetDataHeaders getDataHeaders = new GetDataHeaders();
            getDataHeaders.secmaster = true;
            getDataHeaders.secmasterSpecified = true;
            //getDataHeaders.fundamentals = true;
            //getDataHeaders.fundamentalsSpecified = true;
            //getDataHeaders.programflag = ProgramFlag.oneshot;//unnecessary - defaults to this anyway
            //getDataHeaders.programflagSpecified = true;
            //getDataHeaders.pricing = true;
            getDataHeaders.secid = identifierType;
            getDataHeaders.secidSpecified = true;                    

            SubmitGetDataRequest sbmtGtDtreq = new SubmitGetDataRequest();
            sbmtGtDtreq.headers = getDataHeaders;

            sbmtGtDtreq.fields = new string[] { 
                                                "DEBT_TO_EQUITY_FUNDAMENTALS_TKR"                                                
            };

            int currentFundYear = DateTime.Now.Year;

            //var fundYears = new List<int>();



            List<Instrument> fundYearInstruments = new List<Instrument>();

            Instrument fundYearInstrument = null;

            fundYearInstrument = new Instrument();
            fundYearInstrument.id = identifier;
            fundYearInstrument.typeSpecified = true;
            fundYearInstrument.type = identifierType;

            fundYearInstrument.yellowkey = MarketSector.Corp;
            fundYearInstrument.yellowkeySpecified = true;
            //fundYearInstrument.overrides = new Override[] {};//{ new Override() { field = "EQY_FUND_YEAR", value = currentFundYear.ToString() } };
            fundYearInstruments.Add(fundYearInstrument);
            //fundYears.Add(-1);



            Instrument[] instr = fundYearInstruments.ToArray();
            Instruments instrs = new Instruments();
            instrs.instrument = instr;

            sbmtGtDtreq.instruments = instrs;



            try
            {


                SubmitGetDataResponse sbmtGtDtResp = ps.submitGetDataRequest(sbmtGtDtreq);                       


                RetrieveGetDataRequest rtrvGtDrReq = new RetrieveGetDataRequest();
                rtrvGtDrReq.responseId = sbmtGtDtResp.responseId;

                RetrieveGetDataResponse rtrvGtDrResp;

                do
                {
                    System.Threading.Thread.Sleep(POLL_INTERVAL);
                    rtrvGtDrResp = ps.retrieveGetDataResponse(rtrvGtDrReq);
                }
                while (rtrvGtDrResp.statusCode.code == DATA_NOT_AVAILABLE);                       



                if (rtrvGtDrResp.statusCode.code == SUCCESS)
                {

                    for (int i = 0; i < rtrvGtDrResp.instrumentDatas.Length; i++)
                    {

                        for (int j = 0; j < rtrvGtDrResp.instrumentDatas[i].data.Length; j++)
                        {

                            if (rtrvGtDrResp.instrumentDatas[i].data[j].value == "N.A." || rtrvGtDrResp.instrumentDatas[i].data[j].value == "N.S." || rtrvGtDrResp.instrumentDatas[i].data[j].value == "N.D.")
                                rtrvGtDrResp.instrumentDatas[i].data[j].value = null;

                            return rtrvGtDrResp.instrumentDatas[i].data[j].value;

                        }


                    }
                    return null;
                }
                else if (rtrvGtDrResp.statusCode.code == REQUEST_ERROR)
                {
                    log.ErrorFormat("Error in the submitted request: {0}", rtrvGtDrResp.statusCode.description);
                    return null;
                }
            }
            catch (Exception e)
            {
                log.ErrorFormat("Error in GetData - {0} - {1}", e.Message, e.InnerException == null ? "" : e.InnerException.Message);
                return null;
            }

            return null;
        }
公共字符串GetFundamentalTicker(字符串标识符,InstrumentType标识符类型=InstrumentType.CUSIP) { PerSecurityWS ps=新的PerSecurityWS(); 尝试 { DebugFormat(“Cert路径为:{0}”,CertPath); X509Certificate2客户端证书=新的X509Certificate2(证书路径“”); ps.ClientCertificates.Add(clientCert); } 捕获(例外e) { log.ErrorFormat(“证书设置中的错误-{0}-{1}”,e.Message,e.InnerException==null?”:e.InnerException.Message); 返回null; } //设置请求头 GetDataHeaders GetDataHeaders=新建GetDataHeaders(); getDataHeaders.secmaster=true; getDataHeaders.secmasterSpecified=true; //getDataHeaders.fundamentals=true; //getDataHeaders.fundamentalsSpecified=true; //getDataHeaders.programflag=programflag.oneshot;//不必要-默认为 //getDataHeaders.programflagSpecified=true; //getDataHeaders.pricing=true; getDataHeaders.secid=identifierType; getDataHeaders.secidSpecified=true; SubmitGetDataRequest sbmtGtDtreq=新的SubmitGetDataRequest(); sbmtGtDtreq.headers=getDataHeaders; sbmtGtDtreq.fields=新字符串[]{ “债转股基本面” }; int currentFundYear=DateTime.Now.Year; //var fundYears=新列表(); List fundYearInstruments=新列表(); 仪器fundYearInstrument=null; fundYearInstrument=新仪器(); fundYearInstrument.id=标识符; fundYearInstrument.typeSpecified=true; fundYearInstrument.type=标识符类型; fundYearInstrument.yellowkey=MarketSector.Corp; fundYearInstrument.yellowkeySpecified=真; //fundYearInstrument.overrides=new Override[]{};//{new Override(){field=“EQY_FUND_YEAR”,value=currentFundYear.ToString()}; fundYearInstruments.添加(fundYearInstruments); //基金年。加上(-1); 仪器[]仪器=基金年仪器。ToArray(); 仪器仪表=新仪器(); 仪器仪表=仪器仪表; sbmtGtDtreq.仪表=仪表; 尝试 { SubmitGetDataResponse sbmtGtDtResp=ps.submitGetDataRequest(sbmtGtDtreq); RetrieveGetDataRequest rtrvGtDrReq=新RetrieveGetDataRequest(); rtrvGtDrReq.responseId=sbmtGtDtResp.responseId; RetrieveGetDataResponse rtrvGtDrResp; 做 { 系统线程线程睡眠(轮询间隔); rtrvGtDrResp=ps.retrieveGetDataResponse(rtrvGtDrReq); } while(rtrvGtDrResp.statusCode.code==数据不可用); if(rtrvGtDrResp.statusCode.code==成功) { 对于(int i=0;i 轮询间隔为5秒,SOAP web服务url为:
我也有同样的问题。我发现,从控制台应用程序(运行速度非常快)和web服务(启动会话需要很多时间)调用彭博API是有区别的。区别在于控制台应用程序和bbcomm进程在同一用户下运行,而web服务(或实际上是iis进程)在系统帐户下运行。您可以尝试注销承载web服务的PC上的所有用户,然后尝试拨打电话。在这种情况下,我想bbcomm是在系统帐户下运行的,因为没有其他人登录并且运行速度很快。信息技术