我有發回MembershipCreateStatus
(System.Web.Security
)調用方法WCF服務方法。當我查看服務定義時,它已將enum重新創建爲MyProject.MyWebService.MembershipCreateStatus
類型,因此它本質上是一個完全不同的對象。WCF服務創建單獨的代理類
有沒有辦法在這我可以告訴服務定義使用System.Web.Security
類代替,即使是這樣的WCF服務中?
我有發回MembershipCreateStatus
(System.Web.Security
)調用方法WCF服務方法。當我查看服務定義時,它已將enum重新創建爲MyProject.MyWebService.MembershipCreateStatus
類型,因此它本質上是一個完全不同的對象。WCF服務創建單獨的代理類
有沒有辦法在這我可以告訴服務定義使用System.Web.Security
類代替,即使是這樣的WCF服務中?
你就可以了。您需要使用KnownTypeAttribute
類裝飾DataContract在您的WCF服務指定枚舉是System.Web.Security.MembershipCreateStatus
型的,我不知道你的環境的細節,但在一般的,除非你同時控制WCF服務和消費的客戶,我會仔細研究支持要求以及未來更改enum的可能性,從而導致與使用此枚舉的客戶端存在向後兼容性問題。另外要考慮的是非.NET客戶端可能會使用您的WCF服務的情況。在這種情況下,你需要考慮如果使用System.Web.Security.MembershipCreateStatus
枚舉是一個好主意,而不是實現自己的狀態來創建成員。 Here是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
類的更多信息,請參閱here