我正在开发一个旧的WCF服务,它为许多系统提供了许多接口和服务.我想更改函数的返回类型而不更改所有服务接口和实现,如下所示:
interface OperationResult
{
ErrorInfo Error { get; set; }
}
interface OperationResult<TResult> : OperationResult
{
TResult Result { get; set; }
}
// old service
interface IService
{
int TestMethod1(TestMethod1Input input);
void TestMethod2(TestMethod2Input input);
}
// Interface that client should see
interface IService
{
OperationResult<int> TestMethod1(TestMethod1Input input);
OperationResult TestMethod2(TestMethod2Input input);
}
Run Code Online (Sandbox Code Playgroud)
我想我可以处理的异常IOperationInvoker,但我不知道改变返回实际服务的价值如何,我想用改变函数的返回类型的WSDL IWsdlExportExtension.但我找不到任何好的文档或样本.
任何人都可以建议任何样本或文档或任何其他方式可以省去更改太多现有服务的麻烦吗?
注意:我有另一种方法,通过创建一个自定义ServiceHost,为实际服务创建一个动态包装,并将其作为服务类型传递给构造函数ServiceHost.但这应该是最后的解决方案,因为它将生成许多动态类型.
小智 6
也许你可以考虑使用IDataContractSurrogate.
它有三种与序列化有关的方法.
GetDataContractType 用于获取序列化或反序列化的类型或获取导出和导入的datacontract.GetObjectToSerialize 用于在序列化之前使对象序列化.GetDeserializedObject 用于获取已序列化的对象.https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/data-contract-surrogates