我有这个奇怪的问题。我编写了一个 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
我玩了一下代码,似乎问题出在 typeAction< 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 合同中使用代表吗?