【问题标题】:Consuming a Web Service purely from an aspx page纯粹从 aspx 页面使用 Web 服务
【发布时间】:2011-08-31 14:55:42
【问题描述】:

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

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

1.调用 LoginSI,提供用户名和密码进行认证, 结果接收到 SessionId

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

3.调用 LogoutSI,传入 SessionId。这将放弃之前的会话 使用 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 服务。但是,我想要的是从同一页面(最初)完成所有这些操作。例如,一旦您成功登录,代码隐藏将处理 Web 服务响应并获取您的会话 ID。然后页面上的一些其他选项将出现,然后每次对 web 服务的调用都将使用会话 ID。

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

任何人都可以在正确的方向上刺激我吗?

【问题讨论】:

  • 什么样的网络服务?休息?肥皂?有 WSDL 吗?
  • @Oded 是的,有一个 WSDL。请原谅我的愚蠢,但我如何确定它是否是 SOAP / REST?
  • 如果它有 WSDL,那就是 SOAP。

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


【解决方案1】:

我将从你提到的最后一点开始回答,即无法引用 web 服务的项目程序集...... 你不必

要为该 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");

希望这会有所帮助..

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多