我有一个返回自定义类(用户)对象的Web服务:
网络服务代码
public class User
{
public string login { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string email { get; set; }
}
[WebMethod]
public User GetUserInfo(int userID)
{
ITDashboardDataContext db = new ITDashboardDataContext();
User usr = (from u in db.tl_sb_users
where u.userID == userID
select new User
{
firstName = u.firstName,
lastName = u.lastName,
email = GetUserEmail(userID),
login = u.login
}).FirstOrDefault();
return usr;
}
当我从另一个应用程序调用Web服务时,我希望将结果转换为用户对象(我已经在此应用程序中重新定义了用户类):
调用应用程序代码
public class User
{
public string login { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string email { get; set; }
}
我正试图用这个带回一个用户对象:
RolloutWriter.RolloutWriter rw = new RolloutWriter.RolloutWriter();
rw.Credentials = new NetworkCredential("myuser", "mypassword", "mydomain");
var vu = rw.GetUserInfo(userID);
User u = (from v in vu
select new User {
email = vu.email,
firstName = vu.firstName,
lastName = vu.lastName,
login = vu.login
}).FirstOrDefault();
这不起作用 - 它告诉我:
Could not find an implementation of the query pattern for source type 'amstaffsite.RolloutWriter.User'. 'Select' not found.
如何取回用户对象?
答案 0 :(得分:2)
当你添加对webservice的引用时,.net读入wsdl&创建使用该服务所需的所有类型。
您获得的是user
生成的类型。它与服务器使用的类型具有完全相同的签名,但它的类型不同 - 这就是您获得类型转换异常的原因。您需要在原始类型上创建工厂或构造函数,以将生成的用户转换为原始用户类型。
如果您使用的是wcf,则可以将这些类型放入一个公共程序集中,由客户端和客户共享。服务器。 WCF可以发现这些类型是等价的&重新使用它们,而不是重新生成类型。
答案 1 :(得分:1)
您的方法GetUserInfo()
返回单个用户,而不是收集。所以你不能在结果上使用LINQ。
在第二部分中,您不需要LINQ:
RolloutWriter.RolloutWriter rw = new RolloutWriter.RolloutWriter();
rw.Credentials = new NetworkCredential("myuser", "mypassword", "mydomain");
User u = rw.GetUserInfo(userID);
<击> 撞击>
<击>// User u = (from v in vu
// select new User {
// email = vu.email,
// firstName = vu.firstName,
// lastName = vu.lastName,
// login = vu.login
// }).FirstOrDefault();
击> <击> 撞击>
答案 2 :(得分:0)
据我所知,您正在尝试从Web服务返回自定义类型。如果需要这样做,自定义类定义需要包含在调用Web服务的代码中。否则它将如何知道用户是什么?如果您不想这样做,您可以做的另一件事是将默认字符串对象作为字符串数组/列表/集合返回,因为User类只是一个POCO类。
请参阅此链接
http://www.codeproject.com/Articles/15967/How-to-Return-a-User-Defined-Object-from-Webservic