私はこの奇妙な問題を抱えています。wcf サービスを作成し、他のプロジェクトへのサービス参照を追加して使用できるようにしました。このサービスを参照するプロジェクトでの使用法は次のようになります。
private DataAccessServiceReference.DataAccessServiceClient Client = new DataAccessServiceReference.DataAccessServiceClient();
Client.UserGetByIdAsync(id);
このメソッドをサービスに追加するまで、すべてがうまくいきました:
IDataAccessService.cs:
[ServiceContract]
public interface IDataAccessService
{
...
[OperationContract]
void UserGetContactsAsync(long userId, Action<ContactDTO[]> onSuccess, Action<Exception> onFailure);
...
}
サービス プロジェクトを再構築し、サービス参照を更新した後、「DataAccessServiceClient」と入力すると、DataAccessServiceReference 名前空間が消えました。その代わりに、Visual Studio はこの奇妙なタイプを生成しました: DataAccessServiceReference.ActionOfArrayOfContactDTOx0gUquOn
コードを少しいじってみましたが、 type に問題があるようですAction< UserDTO[]>
。サービスに別のメソッドを作成すると、次のようになります。
IDataAccessService.cs:
[ServiceContract]
public interface IDataAccessService
{
...
[OperationContract]
void method(Action<int[]> action);
...
}
問題は似ていました->再びタイプDataAccessServiceClient
が利用できませんでした。代わりに、別の奇妙なタイプがありましたが、今回は次のようになりました。DataAccessServiceReference.ActionOfArrayOfintuHEDJ7Dj.
私が使用するとき、Action< int >
またはAction< UserDTO >
すべてが正常に動作します。
ハマった。ご協力ありがとうございました。
編集。
代わりにAction< UserDTO[] >
自分のデリゲートを使用する場合:
public delegate void ActionArrayOfUserDTO(UserDTO[] users);
プロキシはまだ生成されていません。
wcf コントラクトでデリゲートを使用することは可能ですか?