WCF 从引用程序集返回一个类型的对象

4

我看了一些关于这个主题的类似帖子,但没有找到我想要的内容,所以我会解释一下我正在做什么以及遇到的问题。

我有一个MVC3应用程序和一个保存我的模型数据的类库。例如,我的领域模型项目在这里有一个名为CLUser的类:

public class CLUser
{
    public int ID { get; set; }
    [Display(Name = "User Name")]
    [StringLength(50, ErrorMessage = Util.ERRORMESSAGE_STRING_LENGTH_50)]
    public string UserName { get; set; }
    public string Password { get; set; }
    public DateTime PasswordExpiration { get; set; }
    public bool LockedOut { get; set; }
    public string LockedOutReason { get; set; }
    [Display(Name = "Security Question")]
    public string SecurityQuestion { get; set; }
    [Display(Name = "Security Answer")]
    public string SecurityAnswer { get; set; }
    [Display(Name = "Current Status:")]
    public int Standing { get; set; }
    public int MerchantID { get; set; }
    public int PartnerID { get; set; }
    public DateTime CreatedDtTm { get; set; }
    public DateTime UpdatedDtTm { get; set; }
    public List<CLPermission> UserPerms { get; set; }
}

接下来我有一个WCF服务,它引用了与模型CLUser相同的项目。因此在我的WCF中,我有一个名为的操作协定

[OperationContract]
GetUser(string userName, string password);

因此,在MVC项目中,它会被公开。

所以问题来了。我想将CLUser对象设置为调用GetUser的WCF服务的返回值。代码如下:

ServiceClient MyService = new ServiceClient();
CLUser Usr = MyService.GetUser(userName, password);

然而,当我这样做时,会出现以下错误:

无法隐式转换类型 Auth.CLUser 到 Auth.CLUser[C:\ ....\Auth.DLL]

如果WCF和MVC应用程序都引用相同的DLL,它们不应该能够使用相同的对象吗?


3
尝试重新构建DLL,构建服务,启动服务,更新服务引用,构建客户端。 - John Saunders
好的,我今天会试一下看看是否有效。 - Ben Ziegler
好的,我感觉很傻。我之所以会出现那个错误,是因为当我添加我的服务时,我给服务指定了与我的WCF项目相同的程序集名称。这就是为什么它会混淆的原因。只需使用不同的程序集名称重新添加服务即可解决问题。 - Ben Ziegler
3个回答

2

1

正如@JohnSaunders在问题评论中所暗示的那样,请确保引用相同版本的公共程序集。如果模型不同,则无法对WCF消息进行反序列化。


0

看起来你正在使用一个生成的ServiceClient代理,它将创建一个结构相同但不同类型的CLUser(该类型将位于不同的命名空间中),并尝试将其返回值用作共享程序集类型CLUser的引用。如果您的项目中有对ServiceClient的ServiceReference,则会导致此问题。您可以使用类似Automapper的工具将内容从生成的代理类型映射到您首选的共享类型,或者使用ChannelFactory创建客户端连接,然后返回您的共享程序集CLUser类型。个人而言,我更喜欢ChannelFactory方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接