急急:webservice Forms验证报错
各位大侠好:
小弟在做webservice的Forms验证时遇到错误!现在有两个网站,一个是webservice(两个asmx,一个Service.asmx只有helloworld方法,另一个Login.asmx负责身份验证),期web.config配置如下
<authentication mode="Forms">
<forms name="Service" loginUrl="Login.asmx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
一个是webservice调用,webservice发布后调用会出现循环调用,应该是loginUrl这里的问题!但是不知道怎么解决!?希望大家帮帮忙!先谢谢了!
我参考的是这篇文章:http://web.rdxx.com/ASPNET/ASPNET_Skill/2007/6/278173178177.shtml
[解决办法]
web.config里是没有错误的
我晚上做了一下你所说的那篇网上的文献,把具体步骤发给你希望有所帮助吧
首先我写了一个名为login.asmx的WebService文件,放在C:\Inetpub\wwwroot目录下,这样一来只要本地的IIS服务是开着的就可以很方便的调用了。
<%@ WebService Language="C#" Class="login" %>
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
/// <summary>
/// login 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class login : System.Web.Services.WebService {
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
[WebMethod]
public bool Check(string userName, string password)
{
if (userName == "raindust" && password == "123456")//添加验证逻辑
{
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false);
return true;
}
else
{
return false;
}
}
}
然后新建一个基于C#的控制台应用程序(因为我在文章中看到了Console.WriteLine()函数),然后在资源方案管理器中右击点“添加web引用”,选择“本地计算机上的web服务”,这样就能看到我们刚才创建的login服务了,我给的web服务的引用名是“MyServiceLogin”,接下来便是控制台程序的所有代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
public void Login()
{
MyServiceLogin.login login = new ConsoleApplication1.MyServiceLogin.login();
login.CookieContainer = cookieContainer;
login.Check("raindust", "123456");
}
public void ShowHelloWorld()
{
MyServiceLogin.login service = new ConsoleApplication1.MyServiceLogin.login();
service.CookieContainer = cookieContainer;
Console.WriteLine(service.HelloWorld());
}
static void Main(string[] args)
{
Program user = new Program();
user.Login();
user.ShowHelloWorld();
}
}
}
编译运行,出现Hello world
楼主可能对原文中的WebService的客户端代理类理解有误,其实创建这个代理的过程就是我刚才添加的web引用的过程。所以不需要创建两个WebService文件,这篇文章讲的是服务器与客户端之间的通信而不是两个WebService之间的通信
这是我自己的理解,如果理解有误欢迎指正^_^
[解决办法]
如果你有两个网站的话,是不需要下面这一句的
login.CookieContainer = cookieContainer;