簡體   English   中英

WCF服務創建單獨的代理類

[英]WCF service creating separate proxy class

我有一個WCF服務方法,該方法將MembershipCreateStatusSystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM