背后有什么WCF的逻辑产生名字DataContracts
问题描述:
当我使用WCF暴露DataContract作为SOAP wevservice我得到一些时髦genenerated的名字,如:背后有什么WCF的逻辑产生名字DataContracts
[Flags]
public enum EnumType1
{
EnumMember1 = 1;
EnumMember2 = 2;
EnumMember3 = 4;
}
[DataMember]
private Dictionary< EnumType1, Class1> Class1Dictionary;
拥有对线材这块肥皂表示:(我是释义):
<Class1Dictionary>
<KeyValueOfEnumType1Class1UTLV0zE5>
<Key>EnumMember1 </Key>
<Value> ... </Value>
</KeyValueOfEnumType1Class1UTLV0zE5>
</Class1Dictionary>
KeyValueOfEnumType1Class1UTLV0zE5背后的逻辑是什么?我可以解释KeyValueOfEnumType1Class1部分,但UTLV0zE5来自哪里?此外,如果这个任意字符串收费,WCF客户端会中断吗?
答
它看起来有点随机给我。我不知道这个放克是不是随机的,并且会受到会破坏合同的变化的影响。
但如果你是在寻找少funcky WSDL的,解决方法(从here)是继承字典和使用CollectionDataContractAttribute序列化过程中改写输出:
[CollectionDataContract(
Name="MyDictionary", ItemName="Items", KeyName="Key", ValueName="Value")]
public class MyDictionary: Dictionary<EnumType1, Class1>
{
}
应该生成XML,如:
<MyDictionary>
<Items>
<Key>EnumMember1</Key>
<Value> ... </Value>
</Items>
</MyDictionary>
好点,但它仍然没有回答这些问题是如何生成的,WCF需要它们专门用于服务兼容性。 – 2010-11-16 01:53:41
@David Reis - 我很想知道它们是如何生成的 - 它们看起来很随意。我无法真正想象为什么他们出于兼容性原因在那里。对我来说,更可能的是WSDL类型需要是唯一的,使用默认名称会导致更高的碰撞可能性 - 因此它会附加一些base64编码的字符以降低可能性。很明显,改变它们会破坏客户和服务之间的服务合同,所以我怀疑它们每次都是随机的。也许这是服务名称或类似的哈希。 – sheikhjabootie 2010-11-16 05:50:18
事实证明,不管是什么方法,都没关系,因为无论生成的字符串是什么,DataContracts都被认为是兼容的。 – 2010-12-10 09:14:58