C# Bloomberg web service调用单个字段和单个仪器需要1分钟以上
我正在为“债务-股权-基本面-TKR”领域发布彭博网络服务GetData。我将secmaster设置为true,并要求使用带有CUSIP标识符的单一仪器(使用yellowkey=MarketSector.Corp) 我觉得这是一个相当轻量级的电话,因为人们一次就要几千个仪器和几十个字段 我已经设置了很多不同的设置,但我就是不能在几秒钟内让这个请求返回。它为我提供了正确的返回值,但所需时间超过60秒 你知道有没有可能在几秒钟内执行并返回这样的请求 谢谢 编辑-以下是我正在运行的代码:C# Bloomberg web service调用单个字段和单个仪器需要1分钟以上,c#,soap,bloomberg,C#,Soap,Bloomberg,我正在为“债务-股权-基本面-TKR”领域发布彭博网络服务GetData。我将secmaster设置为true,并要求使用带有CUSIP标识符的单一仪器(使用yellowkey=MarketSector.Corp) 我觉得这是一个相当轻量级的电话,因为人们一次就要几千个仪器和几十个字段 我已经设置了很多不同的设置,但我就是不能在几秒钟内让这个请求返回。它为我提供了正确的返回值,但所需时间超过60秒 你知道有没有可能在几秒钟内执行并返回这样的请求 谢谢 编辑-以下是我正在运行的代码: public
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我也有同样的问题。我发现,从控制台应用程序(运行速度非常快)和web服务(启动会话需要很多时间)调用彭博API是有区别的。区别在于控制台应用程序和bbcomm进程在同一用户下运行,而web服务(或实际上是iis进程)在系统帐户下运行。您可以尝试注销承载web服务的PC上的所有用户,然后尝试拨打电话。在这种情况下,我想bbcomm是在系统帐户下运行的,因为没有其他人登录并且运行速度很快。信息技术