【问题标题】:How to implement a WebService without the phsyical .ASMX file?如何在没有物理 .ASMX 文件的情况下实现 Web 服务?
【发布时间】:2011-03-26 02:47:04
【问题描述】:

如何在不存在 .ASMX 文件的情况下创建 WebService? (没有 WSE 3.0 或 WCF)

例如我的网络服务看起来像,

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class myService : System.Web.Services.WebService {
    //...

注意:
它已经很好地发布了如何通过 web.config create and implement a generic HTTP handler 像:

// Concept.Handler1Class
namespace Concept {
    public class Handler1Class : IHttpHandler {
    //...

和 Web.config

<handlers>
  <add name="myHandler1" verb="GET" path="myThing.aspx" type="Concept.Handler1Class" />
   <!-- ...

在上面的示例中不需要物理 .aspx 文件。


我希望对我的网络服务做同样的事情:让它们只存在于已编译的代码中,而没有配套的前端文件。

谢谢。

【问题讨论】:

  • 你问的是服务器端还是纯粹的客户端?从客户端的角度来看,您所描述的内容类似于访问 Java(或其他平台)上的 Web 服务。在这种情况下,您将需要一个描述服务的 WSDL 文件。可以在代理代码中覆盖 WSDL 中指定的 URL,以使用您选择的一种。
  • 服务器端。我会更新问题。
  • 我认为你想要的是页面方法。请参阅创建和使用页面方法下的asp.net/web-forms/tutorials/aspnet-ajax/…

标签: asp.net web-services


【解决方案1】:

这个代码项目页面显示了如何做到这一点:http://www.codeproject.com/KB/aspnet/wsinaclasslibrary.aspx


后人的摘录。有关完整解决方案,请参见上面的链接。

C# Web 服务类

namespace WSLibrary {
    public class WSTest : WebService, IHttpHandlerFactory { 
        //...

Web.config

<httpHandlers>
  <add path="WSTest.asmx" verb="*" type="WSLibrary.WSTest" validate="false"/>
  <!-- ... -->
</httpHandlers>

【讨论】:

  • 就这么简单。谢谢。我以为我已经尝试过了,但可能有错误的属性或值 - 您提供的文章直接引导我进行修复。
  • 我忽略了 IHttpHandlerFactory 的实现。这就是导致我的问题的原因。再次感谢。
  • 呃——应该注意的是,如果你需要 JSON,这将不起作用,因为它是由标记为 internal 的新 ScriptHandlerFactory 处理的,所以你不能使用它:(跨度>
  • 更新:如果您需要 JSON 并且仍在使用 .NET(4.5 之前),您应该使用 JSON.net 对输出进行编码。 (Framework 4.5 中使用的新的默认 JSON 格式化程序)
猜你喜欢
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多