我如何从一个web服务返回自定义类?(How can I return a custom class

2019-10-18 06:07发布

我有一个返回自定义类(用户)的对象的Web服务:

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.

我怎样才能得到一个用户对象?

Answer 1:

当您添加的引用一个Web服务,.NET读取的WSDL和创建所有它需要使用该服务的类型。

什么你找回对于产生类型user 。 它具有完全相同的签名服务器所使用的类型,但它不会是同一类型的 - 这就是为什么你的类型转换异常。 您需要创建无论是厂家,还是原来的型构造,从生成的用户转换到原来的用户类型。

如果您使用WCF,你可以把类型转换成一个共同的组件,双方客户与服务器共享。 WCF可以找出这些类型是等价的重新使用它们,而不是再生的类型。



Answer 2:

你的方法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();



Answer 3:

从我可以告诉你正试图从Web服务返回的自定义类型。 如果你需要做到这一点,自定义类定义需要包含到代码中调用Web服务。 否则怎么会知道用户是什么? 如果你不想这样做,你可以做其他的事情是默认的字符串对象返回一个字符串数组/列表/集合作为用户类只是一个POCO类反正。

请参阅此链接

http://www.codeproject.com/Articles/15967/How-to-Return-a-User-Defined-Object-from-Webservic



文章来源: How can I return a custom class from a web service?
标签: c# linq class