【问题标题】:Understanding .NET Web Services了解 .NET Web 服务
【发布时间】:2011-09-15 10:18:05
【问题描述】:

我最近一直在研究 .net 网络服务(以前从未尝试过),我想知道是否有人可以帮助我进一步了解他们的工作原理。

我主要关注的是 asmx Web 服务;我知道这是现在的遗留问题,但我只是想弄清楚这一点,然后我将转向 WCF,我读到的 WCF 更好/更丰富。

首先,我经常看到 Web 服务代理这个词?这是什么以及我的解决方案的哪一部分也是指这个。当我创建我的解决方案时,它会在 binn 目录中生成一个 .asmx 文件和一个 DLL 文件。

如果用户连接到 asmx 文件,DLL 会做什么?

此外,我过去曾在后续的 .net 解决方案中引用过 asmx Web 服务,并在我的代码中轻松使用它们。 .net asmx Web 服务是否可以从其他平台和语言(例如基于 PHP 或 Java)使用,还是仅限于 .net?

对于非常基本的问题,我很抱歉...我只是从简单的开始:)

【问题讨论】:

    标签: c# .net web-services soap


    【解决方案1】:

    Web 服务代理 是您代码中的一个类,它代表本地或远程托管的 Web 服务 - 它允许您的其他代码与该服务交互,就好像它只是您的任何本地类一样应用。对于使用该服务的其他类,Web 服务可以远程托管这一事实是完全不可见的,他们只知道一个类存在并且具有方法。这些方法通常会转换为 Web 服务上的方法。

    ASMX 文件有两个元素,一个是代码元素,就像 ASPX 中有一个 ASPX.CS ASP.NET 网络表单解决方案。在那个例子中,当你编译你的代码时,你仍然有一个 ASPX,但是 ASPX.CS 被编译成一个 DLL 来执行由 .NET 运行时。这与 ASMX 完全相同。

    当您创建 ASMX 网络服务时,您还会获得一个自动生成的 WSDL 文件 - 可以通过附加 '?wsdl' 来查看> 在您的 Web 服务路径之后。此 WSDL 是一个标准,允许非 .NET 系统(在您的示例中为 Java、PHP)使用 Web 服务。

    希望这会有所帮助!

    【讨论】:

    • 谢谢你,这是一个非常简洁的答案,很有意义!正是我想要的!
    【解决方案2】:

    嗯,你的问题是非常基本的,但是,没有人天生就具备所有知识,我发现自己在回首多年时遇到了确切的问题。


    DLL 的

    我不知道你的编程世界是什么(PHP、Java 等),但在编程语言中(PHP 是一种脚本语言,就像经典 ASP 一样)有些代码是由某人编写的,有时是我们,我们只需“挂钩”到该代码即可使用它。

    在 Java 中,这是 .jar 文件,在 .Net 中是 .dll,它们代表我们可以访问和使用的代码。我们称之为引用。

    每次编译项目时,都会生成代码,压缩和编译,生成 DLL。


    代理

    如果您之前提到过在 .NET 中使用过 Web 服务,那么您知道您可能所做的是添加 Web 引用,就是这样,Web 服务已经准备好被使用了。 .

    这个动作生成了一个代理,这是一个从 Web 服务定义 (WSDL) 中提取的类,您现在可以通过简单的方式调用它

    myWebServiceClient ws = new myWebServiceClient();
    int total = ws.Add(1, 2);
    

    因此,在 .NET 中,您可以使用强类型对象,在开始编写 Web 服务之前生成代理,在 Visual Studio 中,此行为与向项目中添加 Web 引用相同。

    您也可以通过调用名为svcutil.exe 的命令行工具手动生成代理


    跨平台

    由于 Web 服务使用一种通用语言,在本例中为 SOAP,因此任何平台都可以使用在任何其他平台上创建的 Web 服务,只要它们遵循 SOAP 标准。

    如果您了解 PHP,您可以轻松地在 Visual Studio 中创建一个 Web 服务,它会在其中生成您的 asmx 文件并通过 PHP 中的任何 SOAP 库使用它,只需指向创建的 Web 服务定义即可,例如

    htttp://localhost:6543/myservice.asmx?wsdl
    

    【讨论】:

    • 再次,关于答案的另一个地方,正是我想要的,谢谢!
    • 还有一件事我忘了问,关于 asmx Web 服务的单例是什么意思?
    • singleton 是一种设计模式,您只使用一个对象的一个​​实例,在 Web 服务世界中,您应该只连接到一个端点,而不是每次都连接提出请求。
    • 我不知道我离这里有多远,但是.. 如果一个 singeton 模式用于 Web 服务,这是否意味着一次只有 1 个连接到该 Web 服务,然后一旦满足一个新的消费者可以连接吗?
    • Singleton 使用 Web Service,应该连接一次并获取所有数据。在 Web Service 中,对于每次调用,您会打开 DB 连接、获取数据、发送数据、关闭 DB 连接吗?对于大容量服务来说,这将是一场噩梦!
    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2010-09-09
    • 2012-03-30
    • 2016-04-12
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多