除了使用SAS Enterprise Edition的集成组件之外,我还使用在Github上找到的以下项目的一部分来连接SAS服务器。这里的目标是命令服务器按计划运行程序。但是,每次都需要修改程序,这就是我试图触发它们以这种方式运行的原因。但是,它一直在lang.FlushLogLines上抛出错误。
https://github.com/cjdinger/SasHarness
SAS.Workspace ws = server.Workspace;
List<string> results = new List<string>();
Array CCs;
Array lineTypes;
Array logLines;
int maxLines = 100;
SAS.LanguageService lang = (SAS.LanguageService)ws.LanguageService;
Array linesVar = (Array)new string[] { PROGRAM_TEXT };
lang.SubmitLines(ref linesVar);
//THROWS AN ERROR HERE
lang.FlushLogLines(maxLines, out CCs, out lineTypes, out logLines);
for (int i = 0; i < logLines.Length; i++)
{
results.Add((string)logLines.GetValue(i));
}
经过一些研究后,我找到了以下主题,建议确保在我的项目中引用所有必需的dll。这里的谜团是我确实引用了它们,但错误仍然存在。
http://blogs.sas.com/content/sasdummy/2013/06/09/sas-client-with-microsoft-dot-net/
此外,从第一行开始,代码不再使用SASHarness,而是仅使用本机SAS集成库。上面的代码也基于SAS的以下文档中列出的示例。
https://support.sas.com/documentation/cdl/en/itechwcdg/61500/PDF/default/itechwcdg.pdf(第27-28页)
是否有人遇到过与此类似的错误,若然,您是如何纠正的?
答案 0 :(得分:2)
奇怪的是,修复此错误需要为每个无法加载的程序集声明一个实例。我不知道为什么这样可以解决问题,但现在可以解决了。
SAS.Workspace ws = server.Workspace;
string wsId = ws.UniqueIdentifier;
List<string> results = new List<string>();
Array CCs;
Array lineTypes;
Array logLines;
int maxLines = 100;
SAS.LanguageService lang = (SAS.LanguageService) server.Workspace.LanguageService;
Array linesVar = (Array) new string[] { PROGRAM_TEXT };
lang.SubmitLines(ref linesVar);
//For some reason, these two declarations need to be here
SAS.LanguageServiceCarriageControl CarriageControl = new SAS.LanguageServiceCarriageControl();
SAS.LanguageServiceLineType LineType = new SAS.LanguageServiceLineType();
lang.FlushLogLines(maxLines, out CCs, out lineTypes, out logLines);
for (int i = 0; i < logLines.Length; i++)
{
results.Add((string) logLines.GetValue(i));
}