【问题标题】:Need some help regarding webservices需要一些关于 Web 服务的帮助
【发布时间】:2014-02-27 23:28:27
【问题描述】:

我开始学习网络服务,我顺利升到this topic。如果您可以在此处看到单击事件中创建proxy 并在此处存储“Cookie”的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    localhost.MyDemo MyService;

    // try to get the proxy from Session state
    MyService = Session["MyService"] as localhost.MyDemo;

    if (MyService == null)
    {
        // create the proxy
        MyService = new localhost.MyDemo();

        // create a container for the SessionID cookie
        MyService.CookieContainer = new CookieContainer();

        // store it in Session for next usage
        Session["MyService"] = MyService;
    }

    // call the Web Service function
    Label1.Text += MyService.HelloWorld() + "<br />";
}

我对@9​​87654326@ 感到困惑。

据我所知,as 用于强制转换,我猜这里也是一样的,但是

问题 1: 因为Sessionlocalhost.MyDemo 是两个不同的对象,所以如何进行转换?

问题 2:as 没有在此处进行强制转换,那么该行是什么意思?

问题 3: 为什么需要演员表?

问题 4:Session["MyService"] 的值是多少?

请帮助我理解这一点。

【问题讨论】:

  • 您找到了关于 ASMX Web 服务的旧教程。 ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum
  • 是的@JohnSaunders。我只是认为WCF 在学习“Web 服务”之后会更容易。谢谢你的好建议。
  • 实际上,从 2006 年开始,WCF 已经取代了 ASMX Web 服务。
  • 是的。没有理由学习 ASMX Web 服务。

标签: c# web-services session asmx


【解决方案1】:
  1. 您不会将Session 转换为localhost.MyDemo,而是将Session["MyService"]Session["MyService"] 返回一个需要转换为目标类型的对象。在这种情况下,使用 [...] 会调用 indexer
  2. as 以友好的方式进行演员阵容。它尝试执行强制转换,但如果强制转换无效,它不会抱怨。如果它不能进行强制转换,它分配null。因此,在下一行对 null 进行检查。
  3. 需要转换,因为您可以在会话内存中存储任何object。为了使用 MyService 的特定方法或属性,您需要将索引器返回的object 强制转换为MyService 的实例。
  4. 分配后,Session["MyService"] 将设置为 MyService 的实例。

有关 HttpSessionState 类(“Session”对象的类型)的详细概述,请参阅此link。有关用于访问会话内存中的变量的索引器属性,请参阅此link

【讨论】:

    【解决方案2】:

    问题 1:由于 Session 和 localhost.MyDemo 是两个不同的对象,所以如何进行转换? Session 是一个包含任何类型对象的集合。 http://msdn.microsoft.com/en-us/library/ms178581.aspx

    问题 2:as is not doing cast here 那么那条线是什么意思? 它正在铸造

    问题3:为什么需要演员? 在这种情况下,我认为没有必要,因为除了与 null 进行比较之外,从不使用强制转换的值。

    问题 4:Session["MyService"] 的值是多少? 它看起来像是对 Web 服务客户端的缓存引用。

    【讨论】:

      【解决方案3】:

      问题 1

      Sessionlocalhost.MyDemo 不同,但您没有使用 Session,您正在查看存储在 Session["MyService"] 中的对象

      问题 2

      就像强制转换一样,但是如果对象不是特定类型,它会返回 null。更多信息here.

      问题 3

      Session["MyService"] 中存储的对象是对象,as 是必需的,因此它是强类型的。

      问题 4

      Session["MyService"] 将拥有放置在那里的任何对象 - 在这种情况下

      MyService = new localhost.MyDemo();
      Session["MyService"] = MyService;
      

      就我个人而言,我不太喜欢您展示的代码 - 我认为没有理由将 WS 引用存储在会话中(为什么不在某处使用变量)。 MyService 是一个局部变量,因此应该以小写 m 开头,并且似乎不需要 cookie 容器(通常仅用于需要身份验证和保持会话的 Web 服务)。

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        相关资源
        最近更新 更多