我正在尝试将代码放在.ASMX Web服务中并将其更改为类库项目。 Web服务项目有一个web.config文件:
<applicationSettings>
<myService.Properties.Settings>
<setting name="DownloadChunkSize" serializeAs="String">
<value>100000</value>
</setting>
..并且FileService.asmx.cs文件中的代码使用它来检索值:
int chunkSize = (int)Properties.Settings.Default.DownloadChunkSize;
当我尝试重新设计此代码以消除.asmx Web服务时,我的类库项目中出现编译时错误,因为不再有web.config可用。让我试着解释一下我到目前为止所做的事情(以及为什么):
这样做的动机是简化我的项目。也就是说,我有一个带有.asmx项目的Vstudio解决方案。它有一些方法,并封装了与供应商提供的另一个.asmx Web服务的通信。
我尝试的新设计如下:
Project 1是一个名为ProxyASMX的类库项目,带有对供应商Web服务的Web引用。我这里没有提供代码;它只是一个指向供应商Web服务的小app.config。
Project 2是一个类库项目,它引用了ProxyASMX.dll。此FileService.cs文件中的代码与我的原始Web服务相同,但[webmethod]属性已被删除。这是我编译时遇到的项目。
Project 3是一个带有2个HTTPHandler的Web应用程序项目 - Upload.ashx和Download.ashx。该项目将引用Project 2类库。我尝试用原始解决方案中更全面的web.config内容替换小的默认web.config内容,但是当这不起作用时,我想我最好向专家咨询一下这个冒险。
我希望上面的草图很清楚。我认为这应该是非常可行但现在我不太确定。
答案 0 :(得分:5)
您可以将应用程序设置添加到类库中。因此,您在“使用它们”的项目中添加“应用程序设置”。然后,您只需将这些配置部分复制到“项目堆栈”中。
因此,如果我理解你是正确的,你需要将DownloadChunkSize设置添加到Project 2并将此部分复制到Project 3中的web.config。这将是:
<applicationSettings>
<Project2.Properties.Settings>
<setting name="DownloadChunkSize" serializeAs="String">
<value>100000</value>
</setting>
您可以使用以下方式访问Project 3中的此设置:
Project2.Properties.Settings.Default.DownloadChunckSize
在项目2中:
Properties.Settings.Default.DownloadChunckSize
答案 1 :(得分:0)
我认为您需要创建一个ExeConfigurationFileMap并使用它从Project 1中的App.config中检索值。
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"ConfigTest.exe.config"; // relative path names possible
// Open another config file
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
// read/write from it as usual
ConfigurationSection mySection = config.GetSection("mySection");
config.SectionGroups.Clear(); // make changes to it
config.Save(ConfigurationSaveMode.Full); // Save changes
企业图书馆有一个很好的帮助,就是这种东西 - 汤姆霍兰德做得很好writeup
答案 2 :(得分:0)
如果可能的话,我倾向于避免使用库的配置文件。我将这个作为您从库中公开的类的属性,并让应用程序确定设置的存储方式和位置。
如果有多个应用程序重用库,我更可能会考虑库级配置文件(例如NLog)。但在大多数情况下,设置更有意义来自应用程序。