svcutil сгенерировал код привязки службы WCF на стороне клиента, который не компилируется

#.net #wcf #wcf-binding

#.net #wcf #wcf-привязка

Вопрос:

  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
 [System.Runtime.Serialization.DataContractAttribute(Name="TreeTraversalType", Namespace="http://schemas.datacontract.org/2004/07/DsLib")]
public enum TreeTraversalType : int
{
    [System.Runtime.Serialization.EnumMemberAttribute()]
    PreOrder = 0,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    InOrder = 1,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    PostOrder = 2,
}
  

из службы, предоставляющей следующий контракт

   [OperationContract]
  void PrintTraversePath(TreeTraversalType type);
  

Но на стороне клиента говорится, что Serialization не содержит DataContractAttribute .

Кроме того, ранее при компиляции службы я получил ошибку, несовместимую с CLS, для этого перечисления, но позже без каких-либо связанных изменений она разрешилась (должно быть, было изменено что-то еще, что, я не знаю, коррелирует с этим).

Мой вопрос в том, почему это поведение с ошибкой компиляции и что такое соответствие CLS. Не могу ли я указать тип enum в Contract определении службы?

Ответ №1:

Перечисления отлично работают в контрактах. У вас есть ссылка на System.Runtime.Сериализация.dll (где определен DataContractAttribute) в вашем проекте?

Комментарии:

1. черт возьми! глупая ошибка. хм, я заставил его работать с помощью assembly ref. Спасибо. я запутался во всем этом классе привязки из-за более ранней ошибки, связанной с CLS. Кстати, связанный с моим 2-м вопросом, что заботиться о соответствии CLS в целом?

Ответ №2:

Может отсутствовать ссылка для среды выполнения.Пространство имен сериализации.

Перечисления не проблема. Они хорошо работают в контрактах с данными.