纯粹从aspx页面使用Web服务

时间:2011-08-31 14:55:42

标签: c# asp.net html web-services

我的公司在其中一台服务器上托管了一个SOAP Web服务,并且需要使用此Web服务直接从我正在开发的Web前端创建“任务”。我可以访问WSDL。

网络服务文档声明我必须:

1。调用LoginSI,提供身份验证的用户名和密码,        结果收到SessionId

2。对WebService执行任意数量的方法调用,并传入SessionId

第3。调用LogoutSI,传入SessionId。这将放弃当时的会议        与LoginSI建立

这听起来很合理,我已经设法调用LoginSI webservice并使用以下简单的HTML表单检索SessionID:

<form action="http://webservice_server/webservice.asmx/LoginSI" method="post">
    <p>
        Username:<br />
        <input type="text" name="username"/>
    </p>
    <p>
        Password:<br />
        <input type="password" name="password"/>
    </p>

    <input type="submit" value="Test login"/>
</form>

到目前为止一切顺利。下一步是开始执行其他Web服务。但是我想要的是从同一页面(最初)完成所有这些。例如,一旦您成功登录,代码隐藏将处理Web服务响应并获取您的会话ID。然后会出现页面上的其他一些选项,然后每次对webservices的调用都将使用会话ID。

我不知道如何纯粹从代码隐藏(或以任何其他方式实现所需行为)来使用web服务。我发现了一些文章,但他们大多提到了为项目添加程序集引用,我认为我不能这样做,因为我自己没有编写Web服务。

有人能朝正确的方向刺激我吗?

3 个答案:

答案 0 :(得分:3)

我将从你提到的关于无法引用webservice的项目程序集的最后一点开始回答...... 你没有

要为该Web服务创建强类型代理,您只需使用Web应用程序中的添加服务引用选项即可。代理(它是一个常规的C#类)是一个soapclient,它将公开所有的Web服务方法,供您从aspx页面后面的代码访问。

现在的挑战是坚持从Web服务返回给你的SessionId,因为你有各种各样的选择,Sessions,ViewState,QueryString ......所以请你选择。

当然另一种可能性是web服务是以RESTful方式实现的,这意味着没有wsdl文件允许创建强类型代理。在这种情况下,您可以使用WebClient类手动创建代理和服务方法,例如:

WebClient proxy = new WebClient();
byte[] data = proxy.DownloadDataAsync("RESTful Method Uri");

希望这会有所帮助..

答案 1 :(得分:2)

您可以通过Add web reference选项添加对WSDL文件的引用。

这将生成您可以在代码中使用的代理。

有关详细信息,请参阅MSDN上的walk-through(您可以跳转到Adding the Web Service as a Component)。

答案 2 :(得分:2)

你有几个选择。您可以为需要调用的每个服务添加Web引用,或者如果不可能,您可以考虑使用System.Net.WebClient类调用Web服务。

本文介绍了如何动态调用Web服务:

http://blogs.msdn.com/b/kaevans/archive/2006/04/27/dynamically-invoking-a-web-service.aspx