【问题标题】:Dynamically update the web config for webservice动态更新 web 服务的 web 配置
【发布时间】:2023-03-04 09:46:01
【问题描述】:

我在 Web 应用程序中配置的 Web 服务很少。在那我已经将所有的网络服务设置为动态的。所以我可以看到web.config 文件中的所有网络服务。

例如:

<applicationSettings>
    <WebInterface.Properties.Settings>
      <setting name="WebInterface_CustomerCard_CustomerCard_Service"
       serializeAs="String">
        <value>http://localhost:7047/DynamicsNAV/WS/Supratechnic%20(M)%20Sdn%20Bhd/Page/CustomerCard</value>
      </setting>
</WebInterface.Properties.Settings>
  </applicationSettings>

在登录页面中,我需要在运行时动态更改这些 Web 服务,并在登录时将其保存在 web.config 中。后面的代码怎么改?

【问题讨论】:

  • 非常个坏主意。 Web.config不是存储运行时配置数据的地方。修改它将强制应用程序池回收。如果您想在运行时修改设置,请将它们存储在其他地方,例如。在数据库表中
  • 那怎么办?根据他登录的公司,我需要动态更改网络服务
  • 我建议您发布一个关于您的实际问题的问题,而不是您尝试的解决方案 - 您是否有一个多租户应用程序,或者您只是想更改生产部署的 URL?无论如何,您不会“动态更改 Web 服务”。您可以通过更改传递给客户端构造函数的 URL 来调用任何 Web 服务。 web.config 中的设置只是默认值。

标签: c# web-services asmx


【解决方案1】:

Web.config 不适合进行此类更改,因为它在所有用户之间共享。您的应用程序可以同时由多个用户使用,因此此更改会影响其中许多用户,而不仅仅是一个用户。在安全的环境中,您的应用程序无论如何都无法写入 web.config 并且 - 正如@PanagiotisKanavos 指出的那样 - 写入它会立即回收应用程序池。

实现此目的的更好方法是在将 Web 服务客户端实例化为构造函数参数时提供 URL。您可能会在 AppSettings 部分中向您的 web.config 添加第二个 URL。在登录页面中,您决定哪个 URL 对用户来说是正确的,并将其保存在特定于用户的位置,例如处于会话状态。每当您创建客户端实例时,您都会检索 URL 并将其提供给构造函数。

【讨论】:

  • 修改web.config会回收应用程序池,所以它绝对不是存储运行时配置设置的地方。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2011-07-26
相关资源
最近更新 更多