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 --------------------编程问答--------------------
不是很懂,比如我这个HOST只open一次。配置文件变了不重新open是如何生效呢。
能不能具体点。才接触这个还不是很懂 --------------------编程问答-------------------- 你放在这里,只有加载一次。你可以做个父类,放到父类里面或者每次请求的时候你都加载下这个配置文件。 --------------------编程问答-------------------- 怎么写 --------------------编程问答-------------------- 是否要用反射动态加载client节点呢?有没有谁做过这方面的 --------------------编程问答-------------------- 我现在动态的修改了WCF的配置文件。可是服务还是要重新OPEN才能生效新修改的WCF配置文件。有没有办法动态修改WCF配置文件以后,不用重新open serivceHost就能生效呢?
补充:.NET技术 , C#