专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Web Service

急webservice Forms印证报错

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
急急: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:Inetpubwwwroot目录下,这样一来只要本地的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;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: