.NET - 部署 WCF 客户端,没有 app.config

标签 .net wcf app-config

我正在将客户端写入 WCF 服务。这是一个更大系统中的单个应用程序,包括用 C#、C++、VB 和 Java 编写的模块。所有应用程序都共享共同的配置和日志记录机制,无论它们是用什么语言编写的。

我想弄清楚如何构建客户端应用程序,以便它可以在没有 app.config 的情况下运行。为什么?因为 app.config 中的大部分内容都是不应该允许系统管理员更改的样板文件,并且应该允许系统管理员更改的设置应该在系统范围的配置中,而不是在 app.config 文件中坐在 bin 目录中。

举个例子——客户端的 app.config 当前如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="WSHttpBinding_ICourierService">
          <security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation"
            ...
          </security>
          <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
            messageVersion="Default" writeEncoding="utf-8">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          </textMessageEncoding>
          <httpTransport manualAddressing="false"
            ...
            useDefaultWebProxy="true" />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:57102/MyService.svc"
        ...
        >
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

这是系统管理员不应该处理的一堆不透明的样板。其中大部分是由 Visual Studio 插入的。我对文件进行了一项更改 - 我增加了 <readerQuotas/> 中的最大大小.但这是我不希望系统管理员搞砸的变化。除了 <endpoint address=""/> 之外,我希望系统管理员处理的文件中没有其他内容。 .

我正在从系统范围的配置中提取端点地址,并在代码中设置它。此文件中没有任何内容应该是用户可编辑的。

那么,我如何配置一些东西以便我不需要它存在呢?

我可以将它作为资源嵌入到程序集中,并挂接到 app.config 加载过程中,就像我对所需 DLL 所做的那样吗?

创建代码来配置事物的唯一选择是我使用代码设置端点地址的方式吗?在代码中创建必要的绑定(bind)等?那么,考虑到这些不透明的 XML block ,我如何知道要编写什么代码呢?

最佳答案

您可以使用以下代码来创建配置正在执行的绑定(bind)。我不确定这是否会让您完全删除该文件,但如果是这种情况,应用程序将不会使用该配置。将您自己的值放入超时等中。

    var binding = new WSHttpBinding();
    binding.SendTimeout = new TimeSpan(0, 0, 0, 0, 100000);
    binding.OpenTimeout = new TimeSpan(0, 0, 0, 0, 100000);
    binding.MaxReceivedMessageSize = 10000;
    binding.ReaderQuotas.MaxStringContentLength = 10000;
    binding.ReaderQuotas.MaxDepth = 10000;
    binding.ReaderQuotas.MaxArrayLength = 10000;
    var endpoint = new EndpointAddress("http://localhost:57102/MyService.svc");
    var myClient = new WebServiceclient(binding, endpoint);

关于.NET - 部署 WCF 客户端,没有 app.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688798/

相关文章:

c# - 将 app.config 配置部分重新定位到 AppData 文件夹

c++ - 使用 GetFieldProps 获取类的属性值

c# - WCF Web 服务客户端没有端点监听

c# - 如何使用反射和app.config调用wcf?

c# - 如何将 WCF 重定向到外部 URL(Google AdWords 登录)并处理响应?

.net - 在客户端请求反序列化之前和响应序列化之后 Hook 到 WCF 服务

PowerShell 中的 .NET 跟踪,无需创建 .config 文件

c# - 在 C# 中从 PictureBox 中删除图像

c# - 如何明智地使用 StringBuilder?

.NET WCF - 在服务器处理时更新客户端 GUI