彭博社网络服务对单个字段和单个仪器的调用耗时超过1分钟

本文关键字:单个 调用 1分钟 仪器 网络服务 字段 彭博社 | 更新日期: 2023-09-27 17:59:20

我正在为"DEBT_TO_EQUITY_FUNDAMENTALS_TKR"字段调用Bloomberg web服务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;
        }

轮询间隔为5秒,SOAP web服务url为:https://software.bloomberg.com/datalicensewp/dlws.wsdl

彭博社网络服务对单个字段和单个仪器的调用耗时超过1分钟

我遇到了同样的问题。我发现,从控制台应用程序(工作速度非常快)和web服务(启动会话需要大量时间)对Bloomberg API进行相同调用之间存在差异。不同的是,控制台应用程序运行在与bbcomm进程相同的用户下,而web服务(或实际上是iis进程)运行在系统帐户下。您可以尝试注销托管web服务的电脑上的所有用户,然后尝试拨打电话。在这种情况下,我想,bbcomm会进入系统帐户,因为没有其他人登录,工作速度很快。这对我很有效,电话立即得到了回应。