3

非常に基本的なものが欠けていると思いますが、ここに私の窮状があります。VB.netでMembershipUser、Webサービスからオブジェクトを継承して返すクラスを作成しました。

Public Class ModifiedUser
    Inherits MembershipUser

ユーザーは次のようにログインします。

Private Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
    Dim ws As New MembersWS.Members
    Dim Member As New MembersWS.ModifiedUser
    ws.Credentials = System.Net.CredentialCache.DefaultCredentials()
    Member = ws.ValidateUser(Login1.UserName, Login1.Password)
End Sub

オブジェクトがWebサービスで作成されると、のModifiedUserすべてのプロパティMembershipUserと新しいクラスのプロパティが含まれます。

私の例では、ValidateUser関数はユーザーを検証し、追加のプロパティを追加します。

Public Function ValidateUser(ByVal UserName As String, ByVal Password As String) As ModifiedUser
    Dim BaseUser As MembershipUser = Membership.Provider.GetUser(UserName, False)
    Dim Member As New ModifiedUser
    If Membership.Provider.ValidateUser(UserName, Password) = True Then 
        Member = New ModifiedUser(BaseUser.ProviderName, BaseUser.UserName, BaseUser.ProviderUserKey, BaseUser.Email, BaseUser.PasswordQuestion, BaseUser.Comment, BaseUser.IsApproved, BaseUser.IsLockedOut, BaseUser.CreationDate, BaseUser.LastLoginDate, BaseUser.LastActivityDate, BaseUser.LastPasswordChangedDate, BaseUser.LastLockoutDate, 0, "", "", "", "", True)
        ' ... (Set new property values)
    End if
    Return Member
End Function

Memberが返されるLogin1_Authenticateと、読み取り専用プロパティは、Webサービスから返されるオブジェクトに含まれている間、オブジェクトから削除されます。

Webサービスのreference.vbファイルでは、自動生成されたコードにMembershipUser、関連するゲッターとセッターを持つ更新可能なプロパティのみを含む部分的なクラスが含まれています。

Partial Public Class MembershipUser
    Private emailField As String
    Private commentField As String
    Private isApprovedField As Boolean
    Private lastLoginDateField As Date
    Private lastActivityDateField As Date

返されたオブジェクトに読み取り専用プロパティを含める方法を誰かに教えてもらえれば、本当にありがたいです。

4

1 に答える 1

4

Webサービスが読み取り専用プロパティを含むオブジェクトを返す場合、読み取り専用プロパティは常に無視されます。これは、クライアント側では、読み取り専用プロパティの値を設定してデータを逆シリアル化できないためです。これを修正する1つの方法は、何もしないか例外をスローするセッターをプロパティに追加することです。例えば:

Public Property Id() As Integer
    Get
        Return nID
    End Get
    Set(ByVal Value As Integer)
        Throw New Exception("Cannot set read-only property 'Id'")
    End Set
End Property

その他のアイデアについては、この質問を参照してください。

SOAP Webサービスで読み取り専用要素を作成することは可能ですか?

于 2012-09-25T16:24:49.273 に答える