2010-01-13 67 views
3

我被要求在ASP.Net应用程序中读取SAS中的一些数据。我有一个Windows窗体应用程序的工作代码。然而,相同的代码不是工作在ASP.Net但是我可以试试它。具有相同引用的干净项目始终失败。从.Net中的SAS数据源读取数据

这就是我已经得到了连接:

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时失败的结果。无论出于何种原因,这似乎是无处不在引为如何做到这一点只是不断通过时运行ASP.Net引发错误的片段

OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter 
         (<Read Command>, 
    "provider=sas.iomprovider.1; SAS Workspace ID=" + 
    oSASWorkspace.UniqueIdentifier); 

我猜这是一个用户权限问题,它不喜欢在IIS用户下运行,但不知道授予它的权限。有些SAS文档在某处或其他地方(抱歉,找不到)建议确保用户有权限,但ASPNET用户可以完全访问开发机器上的整个SAS程序目录。有谁知道还有什么我可能需要设置?谢谢。

回答

0

您正在使用哪种版本的SAS?从9.13开始,WorkspaceManager不赞成使用ObjectManagerMulti(或9.2中的ObjectManagerMulti2)。我不确定这会不会解决你的错误。

+0

版本8,对不起。 – eftpotrm 2010-01-13 23:47:55

0

是另一台机器上的asp服务器。如果是这样,并且可能无论如何,您需要授权SAS Integration Technologies。有关血淋淋的细节,请参阅在线文档。

+0

谢谢,是的。我相当肯定,这不是一个授权问题或类似的,但因为从Windows窗体应用程序运行时相同的代码工作。它只有在ASP.Net应用程序中运行时才会中断。 – eftpotrm 2010-01-14 18:41:20

0

在IIS中运行类似的东西时遇到了一些问题。首先,您必须在管理工具 - >组件服务中调整SAS Workspace组件的权限。您必须为您的应用程序池正在运行的用户添加权限。这将在组件的属性窗口下 - >安全选项卡 - >启动和激活权限以及访问权限。

我也最终不得不修改配置中的SASUSER目录,因为网络服务没有访问权限。

C:\ Program Files文件\ SASHome \ SASFoundation \ 9.3 \ NLS \ EN \ sasv9.cfg

/* - * SASUSER/ -SASUSER“C “CSIDL_PERSONAL \我的SAS文件\ 9.3?”:\ sasuser“