Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中创建登录/密码(将列表与字符串进行比较)_C#_String_Wcf_List - Fatal编程技术网

在C#中创建登录/密码(将列表与字符串进行比较)

在C#中创建登录/密码(将列表与字符串进行比较),c#,string,wcf,list,C#,String,Wcf,List,你好,我试图创建一个登录使用wcf,但不知何故,似乎我的程序不工作,因为我想;( public类用户服务:IUserService { [数据成员] 公共字符串登录{get;set;} [数据成员] 公共字符串密码{get;set;} [数据成员] 公共字符串类型{get;set;} [数据成员] 公共int ID{get;set;} 公共列表GetUserInformation() { QuizDBEntities contex=新QuizDBEntities(); var UserInfo=

你好,我试图创建一个登录使用wcf,但不知何故,似乎我的程序不工作,因为我想;(

public类用户服务:IUserService
{
[数据成员]
公共字符串登录{get;set;}
[数据成员]
公共字符串密码{get;set;}
[数据成员]
公共字符串类型{get;set;}
[数据成员]
公共int ID{get;set;}
公共列表GetUserInformation()
{
QuizDBEntities contex=新QuizDBEntities();
var UserInfo=从contex中的a选择一个;
返回UserInfo.ToList();
}
}
我创造

protected void Button1_Click(object sender, EventArgs e)
    {
    string username = TextBox1.Text;
            string password = TextBox2.Text;
            UserService vs = new UserService();
            List<UserInfo> alfa = new List<UserInfo>();
 }
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
字符串username=TextBox1.Text;
字符串密码=TextBox2.Text;
UserService vs=newuserservice();
列表alfa=新列表();
}

我使用了一些foreach/if循环,但每次我做错了什么,我的列表就好像是空的一样(我尝试了grindwiev并获得了所有数据;()任何人都可以帮助我,并提示我如何将列表与登录名/密码进行比较?

WCF服务实际上不是一项服务,直到它被托管在某个地方(IIS、自托管等)。只需添加属性
[ServiceContract]
[OperationContract]
不会神奇地使其成为服务

客户端不直接访问WCF等SOAP Web服务-客户端通过代理与服务交互。Visual Studio可以通过添加服务引用或命令行svcuti.exe自动生成此代理。执行此操作的简单方法是创建新的WCF服务应用程序-这将是hos有不同的(我认为更好的)方法来托管服务,但是为了简单和说明起见,我们将使用这个方法

因此,假设您有一个WCF服务应用程序正在启动和运行,并且它具有您在上面发布的代码。然后,您可以在VS解决方案资源管理器中选择“添加服务引用”以向您的服务添加服务引用。这将生成一个供您使用的代理。代理的名称通常为
UserServiceClient
(也就是说,VisualStudio在末尾添加了
Client

要使用此代理调用服务中的方法,请执行以下操作:

UserServiceClient proxy = new UserServiceClient();
List<UserInfo> users = proxy.GetUserInformation;
UserInformation
类包含您最初在服务中拥有的数据成员。LINQ查询选择具有匹配用户名和密码的用户,并填充
UserInformation
类(属性名称是推测的,因为我不知道您的
UserInfo
实体看起来像什么)。结尾处的
SingleOrDefault()
选择一个匹配结果,或者如果未找到匹配项,则返回默认值-在本例中为空

然后您可以这样使用它:

UserServiceClient proxy = new UserServiceClient();
UserInformation user = proxy.GetUser("someName", "somePassword");
proxy.Close();

if (user == null)
{
    // No match was found, so do something
}
else
{
    // Match was found, so proceed with what you were doing
}

以上所有内容主要是为了说明目的,但您应该能够适应您的程序的需要。我还建议您通过谷歌搜索一些关于如何创建和托管WCF服务的好教程。

您可能已经编写了一个服务,但您并没有像以前那样使用它。
UserService vs=new UserService();
只是创建类的一个新实例。是否向UserService添加了服务引用?Im使用{public interface IUserService{[OperationContract]List GetUserInformation();}我可以通过发布的
UserService
代码看出这一点。您是否有对
UserService
的引用,或者您是否有对它的服务引用?它们不是一回事。在发布的代码中,您试图直接访问服务,而这不是访问SOAP web服务的方式。它们是通过粗略的代理,如果你使用添加服务引用来添加服务,VS会自动为你创建代理。谢谢你,这对我帮助很大!
[DataContract]
public class UserInformation
{

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

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

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

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

public UserInformation GetUser(string userName, string password)
{

    UserInformation user = new UserInformation();

    using (QuizDBEntities context = new QuizDBEntities())
    {

        user = (from a in context.UserInfoes
                where a.UserName == userName && a.Password == password
                select new UserInformation() {
                    Login = a.UserName,
                    Password = a.Password,
                    Type = a.Type,
                    ID = a.ID}).SingleOrDefault();
    }

    return user;
}
UserServiceClient proxy = new UserServiceClient();
UserInformation user = proxy.GetUser("someName", "somePassword");
proxy.Close();

if (user == null)
{
    // No match was found, so do something
}
else
{
    // Match was found, so proceed with what you were doing
}