如何使用自定义序列化WCF?

时间:2013-09-10 14:59:39

标签: c# wcf serialization

有没有人在WCF中实现过自定义序列化程序?我想用自定义序列化程序替换WCF默认序列化程序的原因是从同一个wcf代理客户端调用不同的服务。如果有人建议这样做,我会很高兴吗?

2 个答案:

答案 0 :(得分:0)

我在最近做的一个项目上做了类似的事情。

但是我确实有2个不同的WCF客户端。我如何“切换”是因为我在客户端之间创建了一个共享接口,然后使用ServiceLocator来获取IClient

这有意义吗?

答案 1 :(得分:0)

如果我正确理解了这个问题,那么您有一个应用程序要根据某些条件与两个使用相同接口的服务之一进行通信。这些服务具有不同的配置,因此您无法重用相同的配置。

要解决这个问题,我会在应用程序配置中设置两个配置,如果您愿意,也可以在代码中完成。

<client>
  <endpoint address="http://service1"
            binding="basicHttpBinding"
            bindingConfiguration="Service1Binding"
            behaviorConfiguration="Service1Behavior"
            contract="IServiceInterface, Service"
            name="Service1"/>

  <endpoint address="http://service2"
            binding="basicHttpBinding"
            bindingConfiguration="Service2Binding"
            behaviorConfiguration="Service2Behavior"
            contract="IServiceInterface, Service"
            name="Service2"/>
</client>

在您的代码中,您需要某种条件语句来确定要与之通信的服务。完成此操作后,您可以为所需配置创建ChannelFactory

string serviceName = FullMoon ? "Service1" : "Service2";

var channelFactory = new ChannelFactory<IServiceInterface>(serviceName);

var proxy = channelFactory.CreateChannel();

proxy.SomeServiceCall();

channelFactory.Close();

如果您使用IoC注入代理,您可能需要将其推入某种工厂。您还可以查看优化这一点,因为创建ChannelFactory是一个昂贵的部分,可以创建工厂而无需仅为合同指定配置。然后,您需要在创建通道时指定绑定和端点。