WCF服务正在创建单独的代理类
本文关键字:代理 单独 创建 服务 WCF | 更新日期: 2023-09-27 18:00:06
我有一个WCF服务方法,它将MembershipCreateStatus
(System.Web.Security
)发送回调用方法。当我查看服务定义时,它已经将枚举重新创建为MyProject.MyWebService.MembershipCreateStatus
的类型,因此它本质上是一个完全不同的对象。
有没有一种方法可以告诉服务定义使用System.Web.Security
类,即使它在WCF服务中也是这样?
您可以。您需要使用KnownTypeAttribute
类来修饰WCF服务中的DataContract,以指定枚举的类型为System.Web.Security.MembershipCreateStatus
。我不知道您的环境的详细信息,但通常情况下,除非您同时控制WCF服务和消费客户端,我会仔细研究支持需求以及未来对枚举进行更改的可能性,这些更改会导致与使用此枚举的客户端的向后兼容性问题。还需要考虑一个非.NET客户端可能使用WCF服务的场景。在这种情况下,您需要考虑使用System.Web.Security.MembershipCreateStatus
枚举与实现自己的成员创建状态相比是否是一个好主意。下面是关于StackOverflow的另一个问题,并对这个主题进行了很好的讨论。
例如,请参阅下面的以下代码
[ServiceContract]
public interface IMembershipService
{
[OperationContract]
CreateMemberResponse CreateMember(ApplicationUser userToCreate);
}
[DataContract]
[KnownType(typeof(System.Web.Security.MembershipCreateStatus))]
public class CreateMemberResponse
{
[DataMember]
public MembershipCreateStatus Status { get; set; }
}
[DataContract]
public class ApplicationUser
{
public bool ReturnSuccess { get; set; }
public ApplicationUser()
{
ReturnSuccess = true;
}
}
您可以按照如下方式编写针对此服务的测试,此测试将成功。
[TestClass]
public class MembershipStatusInvocationTests
{
[TestMethod]
public void CreateMemberShouldReturnMembershipCreateStatusEnum()
{
var client = new MembershipServiceClient();
var response = client.CreateMember(new ApplicationUser {ReturnSuccess = true});
Assert.IsInstanceOfType(response.Status, typeof(System.Web.Security.MembershipCreateStatus));
}
}
有关KnownTypeAttribute
类的更多信息,请参阅此处