c# - 纯粹从 aspx 页面使用 Web 服务

标签 c# asp.net html web-services

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

网络服务文档指出我必须:

<强>1。调用LoginSI,提供用户名和密码进行鉴权, 结果收到 SessionId

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

<强>3。调用 LogoutSI,传入 SessionId。这将放弃之前的 session 与LoginSI建立

这听起来很合理,我已经设法调用 LoginSI 网络服务并使用以下简单的 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 服务。但是,我想要的是从同一页面(最初)执行所有这些操作。例如,一旦您成功登录,代码隐藏将处理网络服务响应并获取您的 session ID。然后页面上会出现一些其他选项,然后每次对网络服务的后续调用都将使用 session ID。

我不知道如何纯粹从代码隐藏(或以任何其他方式实现所需行为)使用网络服务。我找到了一些文章,但它们大多提到了向项目添加程序集引用,我认为我无法做到这一点,因为我自己没有编写 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");

希望这有帮助..

关于c# - 纯粹从 aspx 页面使用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7258907/

相关文章:

c# - 如何使用 Azure 服务总线实现 FIFO 主题

asp.net - 根据内容调整 iFrame 高度

html - 添加VH时图像重叠Div

html - 表行背景大小重复

找不到 asp.net 成员(member)资格

java - 导航栏中的 wicket-bootstrap 面包屑

适用于 Silverlight 5 的 C# PCM 数据音频播放器

c# - 在 C# 中将显示发送到 sleep 模式

c# - 在 MVC 中同时将数据写入两个表时遇到问题

c# - Entity Framework Include() 强类型