C# 检测远程WCF服务契约更改

C# 检测远程WCF服务契约更改,c#,wcf,C#,Wcf,我想知道WCF服务是否已经更新,我需要更新我的服务引用 例如,我可以从远程服务接收类型为ShapeBase的对象。从我上次更新服务引用时起,它从Square中提取了一个已知类型的后代 但是,如果在远程服务上,他们现在引入了ShapeBase的新后代,比如Circle,那么我的代码将继续工作,直到他们向下发送Circle对象,此时,它将落入试图反序列化的堆中(这并不奇怪) 是否有一种程序化的方法来验证本地和远程服务之间的契约?我只想知道是否有差异,尽快 [System.CodeDom.Compil

我想知道WCF服务是否已经更新,我需要更新我的服务引用

例如,我可以从远程服务接收类型为
ShapeBase
的对象。从我上次更新服务引用时起,它从
Square
中提取了一个已知类型的后代

但是,如果在远程服务上,他们现在引入了
ShapeBase
的新后代,比如
Circle
,那么我的代码将继续工作,直到他们向下发送
Circle
对象,此时,它将落入试图反序列化的堆中(这并不奇怪)

是否有一种程序化的方法来验证本地和远程服务之间的契约?我只想知道是否有差异,尽快

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="ShapeBase", Namespace="http://schemas.datacontract.org/2004/07/Test.WCF.Shapes")]
[System.SerializableAttribute()]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(Shapes.ServiceReferences.Shapes.Square))]
public partial class ShapeBase : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Square", Namespace="http://schemas.datacontract.org/2004/07/Test.WCF.Shapes")]
[System.SerializableAttribute()]
public partial class Square : Shapes.ServiceReferences.Shapes.StructsBase
{
}

通常情况下,服务提供商不会在未事先通知其消费者的情况下进行此类更改。总是有一个通知期和事先通知将要改变什么,它将如何影响现有的消费者以及补救措施,以避免严重的休息。因此,除非服务提供商以某种方式或其他方式发布信息,否则无法直接检测服务的更改。所以,总而言之,您不应该排除服务方面的这些突破性变化,至少在生产环境中是这样。谢谢,但这已经发生在我们身上了。还有一种可能是有人收到了通知,但没有收到通知,所以我想建立一些每日验证检查,如果可以在代码中执行,则发出警报。您最多只能定期运行自动化测试,如果失败,将触发警报。这不会告诉您在服务端进行了哪些更改,但您可以调查并找出其服务问题或客户端问题,并采取必要的措施。但是,在服务提供者告诉您之前,您无法确定服务端发生了什么变化。如果您在生产环境中遇到此问题,则这是一个严重的问题,您需要与服务提供商联系。即使在发出通知后,如果您未能更新客户端,则服务提供商也没有错。这就是为什么您需要对服务更新和提供商的通知保持警惕的原因。如果您没有注意到这一点并相应地更新代码,那么您就没有出路,只能面对失败。想象一下,如果谷歌或亚马逊在没有通知百万美元客户的情况下就这样改变了他们的服务。他们在实际发布或发布新版本服务前几个月通知并进行预发布,而不会影响当前版本的客户。通常情况下,服务提供商不会在未事先通知其消费者的情况下进行此类更改。总是有一个通知期和事先通知将要改变什么,它将如何影响现有的消费者以及补救措施,以避免严重的休息。因此,除非服务提供商以某种方式或其他方式发布信息,否则无法直接检测服务的更改。所以,总而言之,您不应该排除服务方面的这些突破性变化,至少在生产环境中是这样。谢谢,但这已经发生在我们身上了。还有一种可能是有人收到了通知,但没有收到通知,所以我想建立一些每日验证检查,如果可以在代码中执行,则发出警报。您最多只能定期运行自动化测试,如果失败,将触发警报。这不会告诉您在服务端进行了哪些更改,但您可以调查并找出其服务问题或客户端问题,并采取必要的措施。但是,在服务提供者告诉您之前,您无法确定服务端发生了什么变化。如果您在生产环境中遇到此问题,则这是一个严重的问题,您需要与服务提供商联系。即使在发出通知后,如果您未能更新客户端,则服务提供商也没有错。这就是为什么您需要对服务更新和提供商的通知保持警惕的原因。如果您没有注意到这一点并相应地更新代码,那么您就没有出路,只能面对失败。想象一下,如果谷歌或亚马逊在没有通知百万美元客户的情况下就这样改变了他们的服务。他们在实际发布或发布新版本的服务前几个月通知并进行预发布,而不会影响当前版本的客户。