自动配置WCF客户端

时间:2015-03-20 13:39:07

标签: wcf configuration

我们为客户创建了一个WCF服务应用程序。由于该服务用于传输大量数据(可能需要很长时间),因此对Web.config文件进行了一些更改(例如增加的超时限制或消息大小限制)以适应这种情况。

一切正常并且没有技术问题......除了客户端并不完全满意,每当他们创建一个消耗WCF服务的新应用程序时,他们需要手动将所有更改添加到客户端{{ 1}}文件。

他们希望自动从服务中读取更改。

我从来没有WCF有这样的功能,所以我不认为这是可能的。但我非常希望确认......或否认,如果这确实可行。

2 个答案:

答案 0 :(得分:1)

除非您创建自定义方法来公开这些参数,或者至少是它们的值,否则消费者看不到它们。

配置文件应该是私有的,这就是您无法在标准安装中浏览它们的原因。

听起来我的客户需要接受,或许在添加新服务时,需要做一些工作。从理论上讲,它们可以从现有应用程序中剪切和粘贴servicemodel配置或部分,以节省“一些”时间。

答案 1 :(得分:1)

IIRC ..在早期版本的stocktrader应用程序中。

How to implement Configuration Service 5.0 of the StockTrader 5.0 sample application?

在上面的SOF链接中提到

有一种方法可以从服务中获取配置。 然而,股票交易者应用程序看起来与之前做的大不相同。 所以我不知道哪个版本变得与众不同。 Greg Leake(Leak)是我在TechEd一年遇到的那个家伙的名字......在谈论这个,IIRC。

实施并不是特别的。

编辑一些客户端配置文件的成本........与配置服务相比.....你将不得不拨打电话。

但听起来你的客户需要一些奶酪和他们的抱怨。

这是一段较旧的视频......可能会让您走上正确的道路。

http://channel9.msdn.com/Shows/Endpoint/endpointtv-High-Performance-WCF-NET-Stock-Trader-with-Greg-Leake

此PDF

http://download.microsoft.com/download/7/C/9/7C9F7B89-8AF0-4433-AB3A-B615C8EF9484/ConfigServiceVSTemplate.pdf

会给你提示。

启动并运行“配置服务”需要做很多工作。

我们最终......没有做到.......并在msbuild任务中使用xml-manipulation .......来调整wcf客户端xml部分。

编辑:

替代想法。将WCF放在单独的文件中并分发它们。 它将使“编辑地点”更加明显.....或者全部替换所有(4)文件。

app.config或web.config

<?xml version="1.0"?>
<configuration>

    <system.serviceModel>

        <behaviors configSource="WCFBehaviors.config">
        </behaviors>

        <bindings configSource="WCFBindings.config">
        </bindings>

        <client configSource="WCFClient.config">
        </client>

        <services configSource="WCFServices.config">
        </services>


    </system.serviceModel>

然后制作4个文件。 示例WCFServices.config

<services>
    <service name="MyApp.MyService">
        <endpoint
              address  = "http://localhost:8001/MyService"
              binding  = "wsHttpBinding" bindingConfiguration="WSHttpBindingName1"
              contract = "MyApp.MyIService" >
        </endpoint>
    </service>
</services>

注意,这些不会像web.config和app.config那样包含auto-voodoo。 你必须确保它们最终出现在你的构建输出中。