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

C# 如何使用自定义序列化WCF?,c#,wcf,serialization,C#,Wcf,Serialization,有人在WCF中实现过自定义序列化程序吗?我想用自定义序列化程序替换WCF默认序列化程序的原因是从同一个WCF代理客户端调用不同的服务。如果有人能建议一种方法,我会很高兴的?我最近在一个项目上做了类似的事 但是我有两个不同的WCF客户端。我是如何“切换”的,然后我在客户端之间创建了一个共享接口,然后使用ServiceLocator获取IClient 这有意义吗?如果我正确理解了问题,您有一个应用程序,您希望与基于某些标准使用相同接口的两个服务之一进行对话。这些服务具有不同的配置,因此不能重复使用相

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

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

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


这有意义吗?

如果我正确理解了问题,您有一个应用程序,您希望与基于某些标准使用相同接口的两个服务之一进行对话。这些服务具有不同的配置,因此不能重复使用相同的配置

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


然后,在代码中需要某种条件语句来确定要与哪个服务对话。完成此操作后,您可以为所需配置创建一个

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

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

var proxy = channelFactory.CreateChannel();

proxy.SomeServiceCall();

channelFactory.Close();
string serviceName=FullMoon?“服务1”:“服务2”;
var channelFactory=新的channelFactory(serviceName);
var proxy=channelFactory.CreateChannel();
SomeServiceCall();
channelFactory.Close();

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

您能更具体一点吗?给出一个你试图解决的问题的简单例子。显示问题以及您可能希望如何解决它。Bronumski我想使用单个wcf客户端调用一些Web服务。因此,对于每个服务调用,我不想独立创建服务引用。相反,我希望有一个通用客户端,它可以根据配置文件提供的配置调用服务。这对序列化有何影响?端点有那么大的不同吗?您必须使用一个可以切换的代理,还是可以使用使用相同接口但不同配置的多个代理?因为我使用相同的WCF客户端调用服务。因此端点、绑定、契约、,每个服务的命名空间信息都不同。我必须使用单个代理,我必须动态切换。因此,如果我使用相同的wcf客户端,默认情况下使用datacontractserialization,这将不允许我动态更改任何内容。相反,我想使用自定义绑定,在其中覆盖wcf默认行为。抱歉,没有看到伪代码中的示例很难完全理解,请原谅我的无知。您不必重用WCF客户端,您可以使用通道工厂动态创建它们。事实上,当你处理完客户后,你应该把它扔掉。如果这是合理的,我会尝试用一个例子正确地回答这个问题。我正在寻找类似的解决方案,但你是否尝试将该解决方案扩展到两种以上的服务?不,我没有,但我不明白为什么金额会产生不同。每个客户机都有自己的配置、绑定等。然后我只是“获取”了我想要的客户机。您有多少服务共享相同的方法?我使用2的唯一原因是因为我有一个测试和实时服务,并希望确保“实时”服务与测试环境的工作方式相同。我可能有1到n个服务,我希望通过传递以下参数来动态调用这些服务,即address、binding、contract、,所以可能有很多服务我想动态调用。