在C#中创建登录/密码(将列表与字符串进行比较)
你好,我试图创建一个登录使用wcf,但不知何故,似乎我的程序不工作,因为我想;(在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=
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
}