私は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
、は、外部dll action
内で宣言された列挙型でありDataSeries
、dll 内で宣言されたクラスです。
dll 内のクラスの元の定義は、メンバーに対してonly および noでDataSeries
マークされています。[Serializable]
[DataMember]
私はクライアント側とサーバー側で 3 番目の dll を使用しています。驚いたことに[DataContract]
、DataSeries クラスを配置しなくても、クラス[EnumMember]
内の列挙型を使用しなくても、両方のアプリケーションが正常に動作していました[DataMember]
。
それで、何が起こっているのですか?
別の実験:
クライアント側からサードパーティを削除し、サービスをそのまま使用すると、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,
}