C# WCF:在提供对服务的访问的共享库中拥有单个 app.config

2023-12-01

我目前有一个包含几个项目的解决方案,其中之一是 WCF 服务。我创建了另一个带有静态类的项目,该静态类基本上提供了通往 WCF 客户端实例的网关,如下所示:

public static class WSGateway
{
    public static DBInteractionGatewayClient MR_WebService
    {
        get
        {
            return new DBInteractionGatewayClient();
        } 
    }
}

这样(或者我认为)我可以使用一个app.config文件仅位于该库中,然后其他项目可以仅引用它并从该属性获取对该客户端的引用。

但问题是,当项目尝试访问该属性时,会抛出异常,告诉我需要app.config在应用程序中,当我复制app.config我的应用程序网关库,它可以工作。


有没有办法避免出现多个app.config应用程序中的文件并且可能在单个库中只有一个?


[更新]解决方案:

下列的安德森·艾姆斯'建议,现在我决定在类中对客户端参考配置进行硬编码,从而消除了对多个app.configs.

因此,我从此翻译了我的配置(app.config):

<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IDBInteractionGateway" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="6000000"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <security mode="None"/>
                    <readerQuotas maxDepth="6000000" maxStringContentLength="6000000" maxArrayLength="6000000"
                        maxBytesPerRead="6000000" maxNameTableCharCount="6000000" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://agnt666laptop:28666/DBInteractionGateway.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDBInteractionGateway"
                contract="DBInteraction_Service.IDBInteractionGateway" name="WSHttpBinding_IDBInteractionGateway">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration> 

对此(一static class):

public static class WSGateway
{
    private static WSHttpBinding binding;
    private static EndpointAddress endpointAddress;

    static WSGateway()
    {
        var readerQuotas = new XmlDictionaryReaderQuotas()
        {
            MaxDepth = 6000000,
            MaxStringContentLength = 6000000,
            MaxArrayLength = 6000000,
            MaxBytesPerRead = 6000000,
            MaxNameTableCharCount = 6000000
        };
        binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};

        endpointAddress = new EndpointAddress("http://agnt666laptop:28666/DBInteractionGateway.svc"); 
    }
    public static DBInteractionGatewayClient MR_WebService
    {
        get
        { 
            return new DBInteractionGatewayClient(binding, endpointAddress);
        }
    }
    public static void ExecuteCommand(Action<DBInteractionGatewayClient> command)
    {
        var ws = MR_WebService;
        command.Invoke(ws);
        ws.Close();
    }
}

出现该错误的原因是 WCF 客户端代理的默认构造函数从本地配置查找通道配置。您可以通过指定要使用/连接的绑定和地址来覆盖此行为。

这里有多个选项,每个选项都有不同的部署模型。

  1. 将端点信息硬编码在“网关”库中(常用术语是“代理”)。您只需返回 new DBInteractionGatewayClient(binding, address);对于此解决方案,您只需分发 WSGateway 代码所在的程序集(以下称为“WSGateway 程序集”)。
  2. 创建所有站点都可以访问的通用配置文件。如果这些服务都在同一台机器上,那么这很容易做到。将配置数据放置在共享的公共驱动器位置并从那里读取。如果您希望所有可能的 WCF 配置可用,则需要使用 ConfigurationManager.OpenMappedExeConfiguration 方法并手动读取它,然后在打开客户端通道之前将其手动应用到您的绑定。为此,您需要确保可以访问位于中心的配置文件并分发您的 WSGateway 程序集。
  3. 将您的配置移至可从所有应用程序访问的公共资源,例如数据库。这将允许您从解决方案中的任何点访问此配置数据。对于此解决方案,您需要确保可以从解决方案中的所有点访问您的配置数据库并分发您的 WSGateway 程序集。

这些是我能立即想到的解决方案。让我们知道您决定做什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# WCF:在提供对服务的访问的共享库中拥有单个 app.config 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 使用 powershell 处理弹出框

    谁能告诉我如何使用 powershell 在弹出窗口上单击 确定 或 取消 我正在尝试使用 powershell 自动化网站 但我是 powershell 新手 我必须单击弹出框中的 确定 按钮才能继续 我了解 VBscript 因为我可以
  • 如何在没有安全警告的情况下发布Java Web Start jnlp应用程序?

    我有一个从网站上的 jnlp 文件启动的 Java 应用程序 我试图让它运行 而不会在运行之前弹出一堆安全警告 该程序被分解为大约 10 个不同的 jar 文件 大约 30 个 jar 库以及一些也包含在 jar 文件中的本机库 我已经使用
  • HttpClient 调用 Windows 身份验证 Api 控制器方法...但没有 WindowsIdentity 随之而来

    当 api 控制器使用 windows authentication 时 有没有办法让我的 api 控制器获取发起对 api 控制器调用的帐户的身份 我的 castController User Identity 是 类型 WindowsI
  • DOM 对象存在后初始化 angular2 组件中的传单地图

    我目前正在尝试在有角度的材质内创建传单地图2tab group如下 import Component NgModule from angular core import BrowserModule from angular platform
  • 在 python 中使用迭代器?

    我刚刚了解了 Python 中的迭代器 但是我很难实现它们 我正在尝试编写一个类以使该循环起作用 odds OddNumbers 13 for i in odds print i 我想编写一个 iter 函数和 next 函数来执行此操作
  • 如何使用自动布局将 UILabel 设置为 UICell 宽度的百分比

    I m wondering how to set a UILabel s width expressed as a of the Cell s total width I m using AutoLayout Normally I woul
  • AxiosError:getaddrinfo ENOTFOUND

    我是新手 正在学习使用 API 我在使用 axios 时收到 POST 请求错误 In docs我想要交互的API 他们给出了curl的例子 curl X POST https ssuploader streamsb com upload
  • Android:更改设备设置时布局尺寸问题

    我目前面临着尺寸变化的麻烦 我已经使用 dp 对 xml 文件进行了编码 但是当我更改设备屏幕尺寸时 布局会发生变化 例如 当我进入 设置 显示 屏幕缩放和字体 并将屏幕缩放从中到大时 布局中的某些元素 例如图像视图或按钮 会增大并超出屏幕
  • Geopy 太慢 - 一直超时

    我正在使用 geopy 获取城市名称的纬度 经度对 对于单个查询 这工作得很好 我现在尝试做的是迭代 城市名称的大列表 46 000 并获取每个城市的地理编码 然后 我通过一个检查循环运行它们 将城市 如果在美国 排序为正确的状态 我的问题
  • Powershell 来分割大型 csv。需要很长时间。希望通过代码审查来缩短流程

    csv 大约是一个演出 有超过 100 万行 我正在尝试将其分成 5 个 前 4 个大约需要 18 小时 第 5 个永远不会发生 或者我没有足够的耐心 我的电脑将处于睡眠模式 因为它不会解锁 function Split Csv Cmdle
  • 如果我使用 Javascript 和 CSS 动态获取数据库的文本,如何将文本划分为列?

    我认为一个脚本使得每个容器中一定数量的字符都可以工作 你知道这样的脚本吗 这是一种响应式设计 我可以使用多个 css 文件 但我只需要一个 html 文件 问题出在我将动态获取的文本中 所以我不知道我会得到多少个字符 在桌面大小中 段落排列
  • fgets() 没有像我期望的那样工作

    谁能告诉我为什么这段代码不起作用 当我运行时 它只是打印出 输入有关线索 1 的信息 并且没有任何输入 跳到另一个步骤 include
  • Windows 物理驱动器访问 fopen 和 fseek

    我目前正在尝试以 C 语言中的二进制数据流的形式访问物理硬盘 我已经安装了一个映像 img 并且可以从操作系统 Win 7 中读取它 我的 C 程序只是尝试以只读二进制模式打开物理驱动器 然后从驱动器读取一些数据 但是 如果我只是从流中读取
  • 将计算列添加到 pandas 中的数据框

    我有一个 OHLC 价格数据集 我已将其从 CSV 解析为 Pandas 数据框 并重新采样为 15 分钟柱
  • 验证 Thymeleaf 中的输入

    我有这个输入 Masa
  • Javascript多维数组返回错误的维度[重复]

    这个问题在这里已经有答案了 我这样初始化一个数组 imgArray imgArray 0 0 image1 imgArray 1 0 image2 imgArray 0 1 image3 imgArray 1 1 image4 imgArr
  • Java 程序的程序计数器寄存器值

    是否可以获取正在运行的 Java 应用程序 尤其是在 Android 模拟器中运行的应用程序 的程序计数器 PC 寄存器值 例如 gprof 会随机采样 PC 寄存器值 以便找出哪个函数正在消耗程序的运行时间 这样的概念对 JVM 有意义吗
  • 优化零重力二维空间中粒子的引力计算

    我用 python 创建了一个小的粒子可视化 我正在计算零重力二维空间中粒子的运动 每个粒子都会根据粒子质量和距离吸引所有其他粒子 我在 pygame 中做了一个可视化 一切都按计划进行 通过计算 但是我需要极大地优化计算 如今 该系统可以
  • Python 多处理和 wxPython 协同工作

    我有以下问题 我编写了一个脚本 该脚本最多同时运行四个进程 通过命令行使用它时 它就像一个魅力 然后我决定使用 wxPython 编写一个 GUI 并且我很快发现 GUI 和脚本需要在不同的进程中运行 以便在另一个执行某些操作时两者都保持可
  • C# WCF:在提供对服务的访问的共享库中拥有单个 app.config

    我目前有一个包含几个项目的解决方案 其中之一是 WCF 服务 我创建了另一个带有静态类的项目 该静态类基本上提供了通往 WCF 客户端实例的网关 如下所示 public static class WSGateway public stati