SDE操作的許可問題


ArcGIS二次開發和ArcGIS桌面應用中,許可是一個老生常談的問題。以前也小結過一些經驗。參考:

http://www.cnblogs.com/liweis/p/4185311.html

問題描述

直接來先看報錯的代碼:

這是很普通的連接Sql Server SDE的代碼操作,

 

/// <summary>
/// 獲取工作空間
public static IWorkspace GetWorkspace(IPropertySet pPropertySet) 
{
    if (pPropertySet == null) {
        return null;
    }

    // 創建 SDE 工作空間工廠,並打開工作空間  
    //Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");  
    //var workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);  
    IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactoryClass();
    IWorkspace workspace = workspaceFactory.Open(pPropertySet, 0);
    return workspace;
}

/// <summary>
/// 轉換成屬性設置
/// </summary>
public static IPropertySet GePropertySet() 
{
    IPropertySet pPropertySet = new PropertySetClass();
    pPropertySet.SetProperty("SERVER", "服務器IP");
    pPropertySet.SetProperty("INSTANCE", string.Format("sde:SQLServer:{0}", "服務器IP"));
    pPropertySet.SetProperty("DATABASE", "數據庫名稱");
    pPropertySet.SetProperty("USER", "sa");
    pPropertySet.SetProperty("PASSWORD", "密碼");
    //pPropertySet.SetProperty("VERSION", "SDE.DEFAULT");
    pPropertySet.SetProperty("AUTHENTICATION_MODE", "DBMS");
    return pPropertySet;
}

 

  

 

經測試SDE連接參數正常,可在Open方法時,報錯"The Product License has not been initialized"(產品許可未初始化),程序是用代碼初始化許可的,運行綁定Desktop,產品許可類別是Advanced(高級版)

解決問題

在相同的環境下,另外一套程序又可以,比較兩者的不同,似乎與MapControl控件存在某種關聯,經反復測試,得出以下結果:使用AO的sample作對比,只要是先拖放MapControl控件,代碼就不會報許可問題(先拖放許可、或不拖MapControl都不行)。

暫時是解決了這個問題,我們姑且認為是10.4的bug,雖然沒有使用MapControl,但也拖放了這個控件(隱藏)。

我一直在想,既然它都能報這個錯,肯定不是什么bug,而不是我們不知道錯在哪里,經過一番測試,最終於不是通過許可方式解決它了。即在代碼初始化許可是除了添加Advanced許可,還添加了ArcServer許可

參考文章

http://gis.stackexchange.com/questions/2090/product-license-not-initialized-error-when-trying-to-open-an-sde-connection-in-a

http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/LicenseInitializer/004800000005000000/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM