WCFでチャットサービスを構築しました。datacontract 属性としてマークされたクラスがあります
[DataContract]
public class Message
{
string _sender;
string _content;
DateTime _time;
[DataMember(IsRequired=true)]
public string Sender
{
get { return _sender; }
set {
_sender = value;
}
}
[DataMember(IsRequired = true)]
public string Content
{
get { return _content; }
set {
_content = value;
}
}
[DataMember(IsRequired = true)]
public DateTime Time
{
get { return _time; }
set {
_time = value;
}
}
}
そして、私のサービス契約は以下のようなものです
[ServiceContract(Namespace="", SessionMode = SessionMode.Required, CallbackContract = typeof(IChatCallback))]
public interface IChat
{
[OperationContract]
bool Connect(Client client);
[OperationContract(IsOneWay=true, IsInitiating=false, IsTerminating=true)]
void Disconnect();
[OperationContract(IsOneWay = true, IsInitiating = false)]
void Whisper(string target, string message);
}
VisualStudio 2010 からクライアント コードを生成しようとすると、クラス メッセージが生成されません。しかし、サービス コントラクトのメソッド "Whisper" のパラメーター "message" のタイプを文字列ではなくメッセージに変更すると生成されました。
パラメータ メッセージのタイプを「文字列」ではなく「メッセージ」に変更します。
[OperationContract(IsOneWay = true, IsInitiating = false)]
void Whisper(string target, Message message);
Message クラスが正しく動作する必要があるコールバック クラスがあります。
public interface IChatCallback
{
void RefreshClient(List<Client> clients);
void ReceiveWhisper(Message message);
void ReceiveNotifyClientConnect(Client joinedClient);
void ReceiveNotifyClientDisconnect(Client leaver);
}
そして問題は、サービス コントラクトのメソッド パラメータまたは戻り値に含まれていない場合に、datacontract 属性としてマークされたクラスが生成されない理由です。