||
第一个问题:授权
在winform程序开发arcobjects程序时候,需要在Program.cs中写如如下代码授权:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
Application.Run(new frmSpatialBuffer());
}
那么,在web service中调用AO,也存在这个授权问题,那在哪里授权呢。
正确答案是:在web sercice类得构造函数中,我的代码如下(参考了网络资料:https://community.esri.com/thread/63551),
public class Service : System.Web.Services.WebService
{
public Service()
{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
ESRI.ArcGIS.esriSystem.IAoInitialize aoInit = new ESRI.ArcGIS.esriSystem.AoInitializeClass();
aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);//esriLicenseProductCodeEngine
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
上诉的两部分代码缺一不可,缺少哪个都会报错误。
如果缺少ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
错误为:网页崩溃
如果
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
ESRI.ArcGIS.esriSystem.IAoInitialize aoInit = new ESRI.ArcGIS.esriSystem.AoInitializeClass();
aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);//esriLicenseProductCodeEngine
都缺少:
授权代码这样处理后,在debug模式下运行没有问题。
但是如果发布到IIS访问,还会出以下问题。
第一个问题:
按照https://www.cnblogs.com/AlphaThink-AT003/p/3880076.html的介绍,在web.config文件中的 <system.web>内加入
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
<add name="Unknown"/>
<add name="HttpSoap"/>
</protocols>
</webServices>
即可。
第二个问题:
将C#工程的framework改为.net 2.0,然后目标平台改为x86,
并将应用程序池的
IIS——应用程序池——高级设置——启用32位应用程序 :true。
参考:https://www.cnblogs.com/autumn/p/3575008.html
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 20:12
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社