Я новичок в WCF, в настоящее время я разрабатываю службу TCP WCF, и я не уверен, правильно ли я понимаю параметры передачи или нет, поэтому я рекомендую вам комментировать и давать стандартизированный способ.
Чтобы прояснить ситуацию, я разработал небольшой сервис для тестирования, который имеет один метод и зависит от внешней .Net dll, которая предоставляет один класс.
Код договора на обслуживание
[ServiceContract]
public interface IMyService
{
[OperationContract]
int Test1(actionType at, calculationType ct, action a);
[OperationContract]
int Test2(DataSeries s);
}
Где actionType
, calculationType
, action
- перечисления, объявленные во внешней dll
и DataSeries
- это класс, объявленный внутри dll.
Оригинальное определение для класса DataSeries
в dll отмечено только [Serializable]
и [DataMember]
на его членах отсутствует.
Я использую 3-й dll на стороне клиента и сервера, и меня удивило, что оба приложения работали нормально, без добавления [DataContract]
в класс DataSeries и без использования любого из [EnumMember]
внутри перечислений, [DataMember]
внутри класса. 1020 *
Так что же происходит?
Еще один эксперимент:
Удаление стороннего поставщика со стороны клиента и использование сервиса как есть
Я обнаружил, что vs2008 генерирует перечисления и класс DataSeries
и маркирует их соответствующими атрибутами?
как
[System.CodeDom.Compiler.GeneratedCodeAttribute ("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="actionType", Namespace="http://schemas.datacontract.org/2004/07/DBInterface")]
public enum actionType : int {
[System.Runtime.Serialization.EnumMemberAttribute()]
All = 0,
[System.Runtime.Serialization.EnumMemberAttribute()]
Buy = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
Sell = 2,
}