[英]WCF service creating separate proxy class
我有一個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
類的更多信息,請參見此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.