C# wcf服务的奇怪问题
我有一个奇怪的问题。我编写了一个wcf服务,并向其他项目添加了一个服务引用,以便使用它。引用此服务的项目中的用法如下所示:C# wcf服务的奇怪问题,c#,.net,wcf,datacontract,operationcontract,C#,.net,Wcf,Datacontract,Operationcontract,我有一个奇怪的问题。我编写了一个wcf服务,并向其他项目添加了一个服务引用,以便使用它。引用此服务的项目中的用法如下所示: private DataAccessServiceReference.DataAccessServiceClient Client = new DataAccessServiceReference.DataAccessServiceClient(); Client.UserGetByIdAsync(id); 在我将此方法添加到服务之前,一切都很正常: IDataAcce
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);
...
}
[ServiceContract]
public interface IDataAccessService
{
...
[OperationContract]
void method(Action<int[]> action);
...
}
仍然没有生成代理
甚至可以在wcf合同中使用委托吗?不幸的是,您一直在使用通过wcf序列化程序生成的名称(臭名昭著的“此行为是设计造成的”)。这很好地解释了为什么WCF以这种方式生成客户机类名 经过一些澄清后,问题中的
操作
表示.NET委托,WCF无法序列化它,因为它表示可执行代码。方法参数和返回值必须是可序列化的类或值类型
根据评论更新:
[DataContract]
public class ActionArrayOfUserDto
{
public string ActionProperty1 { get; set; }
public string ActionProperty2 { get; set; }
// ... the rest of the Action generic class properties
public UserDto[] UserDtos { get; set; }
}
[DataContract]
public class UserDto
{
//UserDto properties...
}
您需要在服务中编写代码,以适当地填充ActionArrayFuserdTo,而不公开Action泛型类。如果将数组更改为IEnumerable,会发生什么情况?对于操作,我得到:DataAccessServiceReference.ActionOfArrayOfFinTuhedJ7dj。同样的问题。所以我没有办法使用Action
[DataContract]
public class ActionArrayOfUserDto
{
public string ActionProperty1 { get; set; }
public string ActionProperty2 { get; set; }
// ... the rest of the Action generic class properties
public UserDto[] UserDtos { get; set; }
}
[DataContract]
public class UserDto
{
//UserDto properties...
}