【发布时间】:2012-11-14 16:53:20
【问题描述】:
我有这个奇怪的问题。我编写了一个 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
我玩了一点代码,似乎问题出在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 合约中使用委托吗?
【问题讨论】:
-
如果将数组更改为 IEnumerable 会发生什么?
-
对于 Action
> 我得到:DataAccessServiceReference.ActionOfArrayOfintuHEDJ7Dj。所以同样的问题。
标签: c# .net wcf datacontract operationcontract