Почему система конфигурации C # не инициализируется при запуске IIS как CGI? - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть исполняемый файл 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

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...