我被要求在 ASP.Net 应用程序中从 SAS 读取一些数据。我有 Windows 窗体应用程序的工作代码。然而相同的代码doesn't在 ASP.Net 中工作,但我可以尝试一下。具有相同引用的干净项目始终会失败。
这是我所得到的连接:
SASWorkspaceManager.WorkspaceManager oWorkspaceManager
= new SASWorkspaceManager.WorkspaceManager();
string xmlInfo = "";
SASWorkspaceManager.ServerDef oServerDef = new SASWorkspaceManager.ServerDef();
oServerDef.MachineDNSName = "server";
oServerDef.Protocol = SASWorkspaceManager.Protocols.ProtocolBridge;
oServerDef.Port = <port>;
oServerDef.BridgeEncryptionAlgorithm = "SASProprietary";
oServerDef.BridgeEncryptionLevel =
SASWorkspaceManager.EncryptionLevels.EncryptUserAndPassword;
SAS.Workspace oSASWorkspace =
oWorkspaceManager.Workspaces.CreateWorkspaceByServer ("",
SASWorkspaceManager.Visibility.VisibilityProcess, oServerDef, "user",
"pass", out xmlInfo);
oSASWorkspace.LanguageService.Submit(
"proc means data = sashelp.class;output out=meanout;run;");
OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter
("select * from work.meanout",
"provider=sas.iomprovider.1; SAS Workspace ID=" +
oSASWorkspace.UniqueIdentifier);
DataSet oDS = new DataSet();
oOleDbDataAdapter.Fill(oDS, "sasdata");
oWorkspaceManager.Workspaces.RemoveWorkspaceByUUID(
oSASWorkspace.UniqueIdentifier);
oSASWorkspace.Close();
只是它无法初始化数据适配器,并出现内部异常
“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”如果我将 Trust=Full 添加到 web.config 文件中,则在填充数据适配器时会直接收到相同的错误。我们可以证明通过工作区管理器执行 SAS 命令是有效的,但当我们尝试读回结果时,初始化 SAS 连接时失败了。无论出于何种原因,该片段
OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter
(<Read Command>,
"provider=sas.iomprovider.1; SAS Workspace ID=" +
oSASWorkspace.UniqueIdentifier);
似乎到处都引用了如何做到这一点,但在通过 ASP.Net 运行时却不断引发错误。
我猜这是某个地方的用户权限问题,它不喜欢在 IIS 用户下运行,但不知道什么需要授予它权限。某些 SAS 文档(抱歉,找不到)建议确保用户拥有权限,但 ASPNET 用户确实拥有对开发计算机上整个 SAS 程序目录的完全访问权限。有谁知道我还需要设置什么?谢谢。