如何在ASP.net中调用webservice里的一个方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ASP.net中调用webservice里的一个方法相关的知识,希望对你有一定的参考价值。

如何在ASP.net中调用webservice里的一个方法

文件,将AJAX的组件添加到工具箱,工具箱上会显示一条AJAX的控件选项,添加AJAX控件里面的SCRIPTMANAGER控件到页面,这些是必须的前提;然后有两种方法可以使用javascript异步调用服务器:
1。WEBSERVICE方法:新建一个WEBSERVICE,新建一个WEBSERVICE方法,此方法用来处理服务器数据,返回一个结果。注意,在此WEBSERVICE声名类的代码上面加上[scripyservice](VB为<scriptservice> _),不加此句,无法调用。然后在SCRIPTMANAGER控件的webservice属性里面添加此WEBSEVICE文件相对路径,就可以在javascript里调用此方法了。调用方式:webservice名.方法名(参数1,参数2....回调函数名),然后声名回调函数,function 回调函数(result),这个result就是WEBSERVICE方法返回的结果,可以在回调函数中直接使用,比如alert(result);这就是整个过程。
2,页面调用方法:页面调用方法需要将页面方法声明为共享方法(C#为static,vb为shared),在方法上增加[webmethod]属性,将SCRIPTMANAGER控件的enablepagemethods属性设为true,这样就可以用javascript调用页面方法了,调用方式pagemethods.方法(参数1,参数2....回调函数)
另外,虚机团上产品团购,超级便宜
参考技术A 1.新建asp.net站点
2.添加web引用,输入webservice的url地址,假设为:http://localhost/Service.asmx
3.点击前往,然后点击你需要调用的方法
4.初始化
xx.xx.xx.Service s = new xx.xx.xx.Service()
s.方法().....
5.调用本回答被提问者采纳
参考技术B 1.将服务在项目中引用
2.打开引用的空间 eg: using mywebservice
3.实力服务类,调用方法 mywebservice1.myclass()
参考技术C 呵呵,建议顺序学习,这个Web Services 教程

参考资料:http://www.w3school.com.cn/webservices/

ASP.NET Membership - 当您在同一个 WebApp 中调用 WebService 时,经过身份验证的用户会丢失

【中文标题】ASP.NET Membership - 当您在同一个 WebApp 中调用 WebService 时,经过身份验证的用户会丢失【英文标题】:ASP.NET Membership - Is authenticated user lost when you call a WebService in the same WebApp 【发布时间】:2010-10-31 03:45:19 【问题描述】:

我正在使用 ASP.NET 登录控件进行身份验证。

我有一些用户,他们能够成功登录。经过身份验证后,我重定向到页面 helloworld.aspx。在 Page_Load 方法中,我首先调用 Membership.GetUser()。这将正确返回经过身份验证的用户。然后,我调用驻留在同一个 WebApplication 中的简单 WCF Web 服务。我的 WebService 调用的第一行是相同的 Membership.GetUser()。这次虽然返回 NULL。

有什么想法吗?

谢谢, 贾斯汀

这是一些代码sn-ps

贾斯汀佩奇.aspx

public partial class JustinPage : System.Web.UI.Page

    protected void Page_Load(object sender, EventArgs e)
    
        MembershipUser user = Membership.GetUser();
        // user is a valid user

        JustinService.JustinTestServiceClient justin = new CMS.WEB.JustinService.JustinTestServiceClient();
        justin.DoWork();
    

JustinTestService.svc.cs

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class JustinTestService

    [OperationContract]
    public void DoWork()
    
        MembershipUser user = Membership.GetUser();
        // user is NULL ???  Why?
        return;
    

如前所述,服务源代码与端点所见的 Justin.aspx 位于同一 WebApplication 中(注意我的应用程序固定在端口 19003 上)...

端点地址="http://localhost:19003/Services/JustinTestService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_JustinTestService" contract="JustinService.JustinTestService" name="BasicHttpBinding_JustinTestService" /

绑定看起来像这样...

安全> 绑定>

也许它与 ???

有关

【问题讨论】:

【参考方案1】:

获取 fiddler 并查看身份验证 cookie 是否正在通过网络发送。

如果不是,您可能需要将其捆绑在您对服务的请求中。

类似的东西

Service1Client ws = new Service1Client(); // Name of webclient proxy
            using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel))
            
                HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty();
                OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);

                HttpCookieCollection cc = Page.Request.Cookies;
                if (Request.Cookies[".ASPXAUTH"] != null)
                
                    HttpCookie aCookie = Request.Cookies[".ASPXAUTH"];
                    String authcookieValue = Server.HtmlEncode(aCookie.Value);
                    httpRequest.Headers.Add("Cookie: " + ".ASPXAUTH=" + authcookieValue);
                

                // Make call to webservice here
                ws.MyWCFCall();

                HttpResponseMessageProperty response = (HttpResponseMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];
             

【讨论】:

【参考方案2】:

问题在于 Web 服务调用并非源自用户经过身份验证的浏览器。相反,您是从您的应用程序发起 Web 服务调用(您的 Web 服务器正在向您的 Web 服务器创建一个 HTTP 请求!)。

【讨论】:

嗯...好的,同意。我故意这样做是因为我想创建一个所有客户都可以与之交流的通用合同。我不想仅仅因为这个 WebApp 驻留在同一个应用程序中,就授予这个 WebApp 对业务层的特殊访问权限。所有客户端应用程序都应通过相同的 API。那么推荐的解决方案是直接调用服务吗?我已经知道这可行,但试图保持一致可能不正确。 我假设您可以获得当前登录用户的凭据并将其发送到 Web 服务,但我不确定这是否安全。您的网络服务是对外开放还是仅对内部开放?

以上是关于如何在ASP.net中调用webservice里的一个方法的主要内容,如果未能解决你的问题,请参考以下文章

asp.net ajax客户端框架如何调用Web Service

在asp.net里怎样异步调用WebService方法

什么时候在 asp.net WebService 中调用 Application_End

ASP.NET Membership - 当您在同一个 WebApp 中调用 WebService 时,经过身份验证的用户会丢失

ASP.NET JS调用WebService——简单例子

纯 JavaScript 调用 ASP .NET WebService 返回 0