当前位置:编程学习 > C#/ASP.NET >>

WCF的路由 routing service 的一个问题。有玩过的朋友进来帮看看可否解决!

是这样的,我现在用WCF4.0的Routing Service路由服务做了一个软路由。
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.serviceModel>
    <services>

      <service name="System.ServiceModel.Routing.RoutingService" behaviorConfiguration="behaviorRouting">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/"/>
          </baseAddresses>
        </host>
        <endpoint name="basicHttpBindingService"
                  address="http://localhost:9000"
                  binding="basicHttpBinding"
                  contract="System.ServiceModel.Routing.IRequestReplyRouter"/>


        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorRouting">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <routing filterTableName="filterTableRouter" soapProcessingEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <routing>
      <filters>
        <filter name="filter_A"
                filterType="Custom"
                customType="RoutingHosts.MyMessageFilter, RoutingHosts"
                filterData="http://HC/NewsRelease"/>
        
      </filters>
      <filterTables>
        <filterTable name="filterTableRouter">
          <add filterName="filter_A" endpointName="endpointServiceA"/>
        </filterTable>
      </filterTables>
    </routing>
    <client>
      <endpoint name="endpointServiceA"
                address="http://172.16.1.104:9010/ServiceA"
                binding="basicHttpBinding"
                contract="*"/>

    </client>
    <bindings>
      <netMsmqBinding>
        <binding name="clientMsmq" exactlyOnce="false">
          <security mode="None"></security>
        </binding>
      </netMsmqBinding>
    </bindings>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>
上面是app.config
大家可以看到我上面Client节点下面只配了一个真实服务的地址。
比如我这个client节点下面的真实服务的IP地址发生变化以后,我要修改这个IP地址。这样就要关闭路由服务,修改IP地址后再重新开启路由服务才会生效。
问题是:有什么办法可以使我不重启路由服务来动态的改变cilent节点下的IP地址。或是新增一个client下的节点或是删除一个,都不要重启路由服务也能生效?
我这种想法可否现实。技术上能否实现呢? WCF Routing 路由 --------------------编程问答-------------------- 你每次加载的时候,都重新加载下配置文件,这样应该没有问题的。 --------------------编程问答-------------------- static void Main(string[] args)
        {
            using (ServiceHost serviceHost = new ServiceHost(typeof(RoutingService)))
            {
                try
                {
                    Console.WriteLine("Routing服务开始启动......");
                    serviceHost.Open();
                    Console.WriteLine("Routing服务启动成功......");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Routing服务启动失败......");
                    Console.WriteLine("失败原因:" + ex.Message);
                }
                finally
                {
                    Console.Read();
                }
            }
        }
控制台宿主HOST --------------------编程问答--------------------
引用 1 楼 qingfeng_wu 的回复:
你每次加载的时候,都重新加载下配置文件,这样应该没有问题的。

不是很懂,比如我这个HOST只open一次。配置文件变了不重新open是如何生效呢。
能不能具体点。才接触这个还不是很懂 --------------------编程问答-------------------- 你放在这里,只有加载一次。你可以做个父类,放到父类里面或者每次请求的时候你都加载下这个配置文件。 --------------------编程问答--------------------
引用 4 楼 qingfeng_wu 的回复:
你放在这里,只有加载一次。你可以做个父类,放到父类里面或者每次请求的时候你都加载下这个配置文件。
怎么写 --------------------编程问答-------------------- 是否要用反射动态加载client节点呢?有没有谁做过这方面的 --------------------编程问答-------------------- 我现在动态的修改了WCF的配置文件。可是服务还是要重新OPEN才能生效新修改的WCF配置文件。有没有办法动态修改WCF配置文件以后,不用重新open serivceHost就能生效呢?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,