我有两个WCF服务连接到我的客户端。我想使用从服务#1检索的User-object,并将其用作服务#2的参数。这是我的MVC控制器TournamentController.cs
代码:
private readonly GCTournamentServiceClient _tournamentClient = new GCTournamentServiceClient();
public ActionResult Join(int id)
{
GCUserServiceClient userClient = new GCUserServiceClient();
// Get current user
var currentUser = userClient.GetUser(0);
if (currentUser != null)
{
// Get selected tournament
var selectedTournament = _tournamentClient.GetTournament(id);
// Check if there are available seats in the tournament
if (selectedTournament.Seats > selectedTournament.RegistredUsers.Count)
{
// Check if user exist amoung registred users
if (!selectedTournament.RegistredUsers.Contains(currentUser))
{
selectedTournament?.RegistredUsers.Add(currentUser);
}
}
}
}
错误Visual Studio提示我:
Argument 1: cannot convert from 'GConnect.Clients.WebClient.GCUserService.User' to 'GConnect.Clients.WebClient.GCTournamentService.User'
所以问题是currentUser
,其类型为GCUserService.User。我无法将其用作RegistredUsers
错误本身非常有意义,但是,我不太确定我是如何转换此类型(正确)。有些文章指出,必须创建一个“共享”服务,它保存用户类型。我无法相信,这样的解决方案应该是必要的。
我可能在这里误解了一些基本的东西(使用WCF和MVC),但如果是这样的话,请赐教。
答案 0 :(得分:0)
所以问题是currentUser,其类型为GCUserService.User。 我无法将其用作RegistredUsers的参数
有两种方法可以解决这个问题:
<强> 1)强>
创建一个类库项目(Visual Studio)并在该项目中添加$('#search').on('input',function(){
var found = false;
$('ul li a span:first-child').each(function (i, el){
if ($(el).text() == $('#search').val()) {
found = true;
return;
}
})
console.log(found);
});
类,编译它并将其程序集(.dll)引用添加到服务和客户端(您的MVC应用程序)。接下来检索该用户对象,就像你已经在做的那样
User
GetUser将返回在单独程序集中定义的var currentUser = userClient.GetUser(0);
类型,该程序集将作为参考添加,如上所述。 User
也将引用相同的程序集,TournamentService
方法将采用相同的RegistredUsers.Add(User userToadd)
对象,WCF运行时应该能够序列化/去除它。
<强> 2)强>
在您的MVC客户端应用程序中,新建User
方法可接受的User
对象。从TournamentService.RegistredUsers.Add
填充其属性,并将该对象作为参数传递给currentUser
方法。
最佳实践
理想情况下,我建议第一种方法是更多工作,但更好的做法,并且集中维护RegistredUsers.Add
类,并重复使用代码。
希望这有帮助!