zoukankan      html  css  js  c++  java
  • If WCF Service side and Client side config is different?!

    from stackoverflow 

    http://stackoverflow.com/questions/4879310/when-setting-up-a-wcf-client-and-server-how-synchronized-does-the-config-files

    最近配置wcf服务,一直有个疑问,一直我们配置wcf服务端跟client端总是一致的,但是如果我们配置的不一样呢?在stackoverflow找到以下答案。其实这个没有说一定那边起作用,比如client的sendtimeout对应的是service端的receivetimeout,而且在client端有些配置是没有用的。这个还得细细琢磨。我擦。。。

    In order to address your request in your last comment to my previous answer, I tried to come up with my approach to how I would create (and modify) server- and client-side config's for any given service. This is based on both theory I read (books, blogs), things I've learned in Juval Lowy's WCF Master Class, and quite a bit of practical experience with several large service implementation projects - this isn't available in one single place, on the web or in a book.... so here it goes:

    I would start basically from scratch. Think about your service first:

    • what address does your service live at?
    • what binding(s) do you want to support?

    Simplest scenario: single service, single endpoint, basicHttpBinding, all defaults

    Service config:

    <system.serviceModel>
       <services>
          <service name="YourNamespace.YourServiceClass">
             <endpoint name="Default"
                 address="http://YourServer/SomeVirtualDirectory/YourService.svc"
                 binding="basicHttpBinding"
                 contract="YourNamespace.IYourServiceContract" />
          </service>
       </services>
    </system.serviceModel>

    Corresponding client config:

    <system.serviceModel>
       <client name="Default">
          <endpoint name="Default"
              address="http://YourServer/SomeVirtualDirectory/YourService.svc"
              binding="basicHttpBinding"
              contract="YourClientProxyNamespace.IYourServiceContract" />
       </client>
    </system.serviceModel>

    Then only ever change something if you really must! And most of all: NEVER EVER let Visual Studio (Add Service Reference) or svcutil.exe screw up your config! Protect it like the apple of your eye!

    Then: if e.g. your data transfer takes more time than the default timeout of 1 minute allows, change that one single setting on both the service side and the client side. Do this by defining a custom binding configuration and referencing that from your endpoints - but change only that - not more!Leave everything else as is, with default values. Don't ever change anything unless you absolutely must (and know what you're doing, and why you're doing it).

    Mind you: the sendTimeout on the client (time allowed until the whole message has been sent) will correspond to the receiveTimeout on the server - the time allowed for the whole message to come in (see this excellent blog post and this MSDN forum thread for more information)

    Service config:

     <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="ExtendedTimeout"
                     receiveTimeout="00:05:00" />
          </basicHttpBinding>
        </bindings>
        <services>
          <service name="YourNamespace.YourServiceClass">
            <endpoint name="Default"
                address="http://YourServer/SomeVirtualDirectory/YourService.svc"
                binding="basicHttpBinding"
                bindingConfiguration="ExtendedTimeout"
                contract="YourNamespace.IYourServiceContract" />
          </service>
        </services>
      </system.serviceModel>

    Corresponding client config:

    <system.serviceModel>
       <bindings>
          <basicHttpBinding>
             <binding name="ExtendedTimeout"
                      sendTimeout="00:05:00" />
          </basicHttpBinding>
       </bindings>
       <client name="Default">
          <endpoint name="Default"
              address="http://YourServer/SomeVirtualDirectory/YourService.svc"
              binding="basicHttpBinding"
              bindingConfiguration="ExtendedTimeout"
              contract="YourClientProxyNamespace.IYourServiceContract" />
       </client>
    </system.serviceModel>

    As you need other changes, like multiple endpoints on the service side, or local settings like bypassProxyOnLocal - adapt your config, do it carefully, step by step, manually, and consider your config an extremely essential part of your whole service - take care of it, put it in version control etc.

  • 相关阅读:
    PAT甲级——1110 Complete Binary Tree (完全二叉树)
    PAT甲级——1111 Online Map (单源最短路经的Dijkstra算法、priority_queue的使用)
    PAT甲级——1112 Stucked Keyboard (字符串+stl)
    PAT甲级——1114 Family Property (并查集)
    PAT甲级——1118 Birds in Forest (并查集)
    Pre- and Post-order Traversals(先序+后序序列,建立二叉树)
    PAT甲级——1123 Is It a Complete AVL Tree (完全AVL树的判断)
    AVL树(自平衡二叉查找树)
    PAT甲级——1126 Eulerian Path
    团队项目-选题报告
  • 原文地址:https://www.cnblogs.com/kklldog/p/5036627.html
Copyright © 2011-2022 走看看