Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么WCF客户端依赖于app.config文件?_Wcf_Silverlight_Web Services_.net 3.5 - Fatal编程技术网

为什么WCF客户端依赖于app.config文件?

为什么WCF客户端依赖于app.config文件?,wcf,silverlight,web-services,.net-3.5,Wcf,Silverlight,Web Services,.net 3.5,就像很多事情一样,我相信这有一个很好的理由,所以请帮助我理解 默认情况下,为什么WCF服务在app.config中存储设置? 尝试使用多个Silverlight类库是非常令人沮丧的。这些类库应该彼此完全独立,而这种对app.config的依赖似乎会导致以下问题: 单一责任原则-我应该能够添加对类库的引用并执行。如果类库使用了服务引用,那么在我开始编写代码之前,这个想法就已经过时了 Muddy Configuration-为了让其他库正常工作,我必须将服务配置复制并粘贴到“主”应用程序配置中。如果

就像很多事情一样,我相信这有一个很好的理由,所以请帮助我理解

默认情况下,为什么WCF服务在app.config中存储设置?

尝试使用多个Silverlight类库是非常令人沮丧的。这些类库应该彼此完全独立,而这种对app.config的依赖似乎会导致以下问题:

  • 单一责任原则-我应该能够添加对类库的引用并执行。如果类库使用了服务引用,那么在我开始编写代码之前,这个想法就已经过时了
  • Muddy Configuration-为了让其他库正常工作,我必须将服务配置复制并粘贴到“主”应用程序配置中。如果端点以任何方式发生变化,我不能只担心该类DLL的新版本——我还必须担心使用它的任何东西
  • 复杂的备选方案-以编程方式创建端点并不漂亮。句号

  • 一定有更好的办法。为什么WCF不至少将服务配置分离为ServiceName.config或复制到输出目录的内容。我错过了什么?你如何处理这个问题?

    因为备选方案也不太好。“ServiceName.config”的问题是ServiceName还需要可配置


    根本问题是在库中有服务引用。库组件不能为应用程序指定绑定。所以您的SRP参数不成立。

    我同意@Henk-库程序集不应该有WCF引用。如果出于某种原因它确实需要依赖注入,我将使用依赖注入,并将服务引用传递给库函数——这对于最大限度地提高测试效益至关重要

    我也不相信你所说的“以编程方式创建端点不漂亮”。创建和分配端点只需几行代码,这是我在Silverlight组件中几乎完全使用的一种技术(例如,如果ServiceReferences.ClientConfig文件中没有指定地址,那么我会返回到宿主应用程序中的已知服务位置,在这种情况下,这些端点是通过编程方式创建的)

    基本上,如果您不介意以编程方式创建端点所需的几行代码,那么您可以将地址详细信息存储在任何配置文件中的任何位置。如果您使用纯声明性方法,则只需要将地址存储在app.config中