У меня есть исполняемый файл C #, который предназначен для запуска в качестве CGI.
Он не ведет себя так же при вызове из командной строки, как при вызове как CGI.
код здесь:
using System;
using System.Configuration;
class Foo
{
static void Main(string[] args)
{
//throw new Exception( "POINT-A: Seen through browser and at command line" );
var appSettings = ConfigurationManager.AppSettings;
throw new Exception("POINT-B:");
}
}
Когда я запускаю его из командной строки, я получаю (как ожидается):
Unhandled Exception: System.Exception: POINT-B:
at Foo.Main(String[] args) in C:\Users\brian\My
Stuff\MMG\Development\mra_query\src\simple.cs:line 10
Когда я смотрю на него как CGI, яполучить это (это неожиданно):
Unhandled Exception: System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.ArgumentException: Illegal characters in path.
at System.Security.Permissions.FileIOPermission.CheckIllegalCharacters(String[] str, Boolean onlyCheckExtras)
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)
at System.AppDomainSetup.VerifyDir(String dir, Boolean normalize)
at System.AppDomainSetup.get_ConfigurationFile()
at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
at System.Configuration.ClientConfigurationHost.GetStreamName(String configPath)
at System.Configuration.ClientConfigurationHost.get_IsAppConfigHttp()
at System.Configuration.ClientConfigurationSystem..ctor()
at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
--- End of inner exception stack trace ---
at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
at System.Configuration.ConfigurationManager.PrepareConfigSystem()
at System.Configuration.ConfigurationManager.get_AppSettings()
at Foo.Main(String[] args) in C:\Users\brian\My Stuff\MMG\Development\mra_query\src\simple.cs:line 9
Почему «POINT-B» достигается при вызове из командной строки, но что-то идет не так, когда вызывается как CGI?
У меня естьфайл App.config, и он находится в той же папке, что и EXE:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="Setting1" value="May 5, 2014"/>
<add key="Setting2" value="May 6, 2014"/>
</appSettings>
</configuration>
Нужно ли этот конфигурационный файл поместить в какое-то специальное место для его использования IIS?Играет ли IIS ApplicationPool какую-то роль в этом, что я не рассматриваю?
В исключении упоминается "Недопустимые символы в пути", но я изо всех сил пытаюсь понять его значение.Кажется, для проверки разрешений на чтение файла конфигурации.Этот файл находится по пути, указанному ниже.Является ли проблема одним пробелом на пути?
C:\Users\brian\My Stuff\MMG\Development\mra_query\cgiroot
Любая помощь очень ценится.