0

我有一堂课:

namespace BugNETLibrary
{
    public class NewUser
    {
        public string UserName { get; set; }
        public int UserRole { get; set; }
        public string LoweredUserName { get; set; }
    }
}

我正在尝试将此类转换为可以在我的项目中引用的 WCF 服务。

我现在有一个界面:

[ServiceContract]
    public interface INewUser
    {
        string UserName { get; set; }
        int UserRole { get; set; }
        string LoweredUserName { get; set; }
    }


[DataContract]
public class GetNewUser
{
    string userName;
    int userRole;
    string loweredUserName;

    [DataMember]
    public string UserName
    {
        get { return userName; }
        set { userName = value; }
    }

    [DataMember]
    public int UserRole
    {
        get { return userRole; }
        set { userRole = value; }
    }

    [DataMember]
    public string LoweredUserName
    {
        get { return loweredUserName; }
        set { loweredUserName = value; }
    }
}

我不确定这是否正确,但我不确定要向继承接口的服务类添加什么,所以我只有

public class NewUser : INewUser
    {

    }

有人可以帮助我下一步需要做什么吗?我确定我已经做错了什么,但我不确定是什么。这真的可能吗?

4

1 回答 1

2

服务向客户端公开方法(操作合同)。你的接口没有任何方法,所以没有什么要实现的(从服务的角度来看)。

你可以这样做:

[ServiceContract]
public interface INewUser
{
    [OperationContract]
    UserInfo CreateNewUser(string userName);
}

然后在实现类中,您将拥有:

public NewUser : INewUser
{

    public UserInfo CreateNewUser(string userName)
    {

        return new UserInfo() {
                   UserName = "John Doe",
                   UserRole = 5,
                   LoweredUserName = "john doe"
                   };
    }
}

UserInfo将是用于表示信息的类,根据您的原始代码,标记为数据合同:

[DataContract]
public class UserInfo
{

    [DataMember]
    public string UserName { get; set; }

    [DataMember]
    public int UserRole { get; set; }

    [DataMember]
    public string LoweredUserName { get; set; }
}

这是一个基于上述代码的简单示例,向您展示如何将它们结合在一起。

然而

您真正应该做的是查看现有库,将功能包装在 WCF 服务中,并将NewUser类标记为数据协定。看起来您正在关注数据,您应该首先关注功能。

换句话说,您当前库中使用 NewUser的方法作为输入或返回类型 - 这是进入服务的内容,而不是NewUser类的属性。

于 2013-08-14T11:14:10.857 回答