Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript使用程序集名称直接调用C#web服务方法_Javascript_C#_Asp.net_.net - Fatal编程技术网

JavaScript使用程序集名称直接调用C#web服务方法

JavaScript使用程序集名称直接调用C#web服务方法,javascript,c#,asp.net,.net,Javascript,C#,Asp.net,.net,我试图理解下面的代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及为什么他/她没有使用ajax调用)。我问过几位同事,他们似乎没有给我正确的解释来理解JavaScript是如何直接访问webmethod的。我希望我的示例足够好,至少可以得到合理的解释,因为我无法发布原始代码 网络服务 namespace ClientName.Version.Services { [WebService(Namespace = "http://tempuri.org/")] [WebSe

我试图理解下面的代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及为什么他/她没有使用ajax调用)。我问过几位同事,他们似乎没有给我正确的解释来理解JavaScript是如何直接访问webmethod的。我希望我的示例足够好,至少可以得到合理的解释,因为我无法发布原始代码

网络服务

namespace ClientName.Version.Services
{
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [System.ComponentModel.ToolboxItem(false)]
   [System.Web.Script.Services.ScriptService]
   public class ClassName : System.Web.Service.WebService
   {
      [WebMethod(EnableSession = true)]
      public List<ReturnData> WebMethod(string param1)
      {
            .
            .
            .
      }
    }
}
编辑: 在@matt把我指到正确的位置之后,如果有人想知道更多的话,在他的回答之上

还是谷歌


“向客户端脚本公开Web服务”了解更多信息

可能发生的情况是:

您正在客户端生成一个代理类,该类将AJAX调用隐藏在一个看起来与服务器端几乎相同的接口后面

如果查看浏览器控制台中的网络选项卡,可能会看到实际的AJAX调用

在MSDN上对的简单搜索应该为您指明了正确的方向:

要从ECMAScript(JavaScript)调用Web服务方法,必须将ScriptServiceAttribute属性应用于相关的Web服务类。将ScriptServiceAttribute应用于包含应用了WebMethodAttribute的一个或多个方法的Web服务类定义时,代理生成脚本将创建与Web服务类相对应的代理对象

看看你的页面,你应该有这样一个部分:

<asp:ScriptManager runat="server" ID="scriptManager">
  <Services>
    <asp:ServiceReference
       path="~/WebServices/SimpleWebService.asmx" />
  </Services>
</asp:ScriptManager>


这就是添加代理的地方。

我目前正在维护一个旧项目,他们所做的是创建了一个服务类,就像您的示例一样

namespace ClientName.Version.Services
{
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [System.ComponentModel.ToolboxItem(false)]
   [System.Web.Script.Services.ScriptService]
   public class ClassName : System.Web.Service.WebService
   {
      [WebMethod(EnableSession = true)]
      public List<ReturnData> WebMethod(string param1)
      {
            .
            .
            .
      }
    }
}

还有一个项目,我们保存使用wsdl.exe生成的代理,并通过实例化soaphttpclientprotocol(服务器端)或使用ajax调用(客户端)以不同的方式访问它们,但在这种情况下,web服务类没有代理。请查看浏览器中实际呈现的页面。我相信ASP会自动生成javascript代理,并将其注入到您的页面中(或者更确切地说,使用代理添加对文件的引用),前提是您在页面中包含一个。
namespace ClientName.Version.Services
{
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [System.ComponentModel.ToolboxItem(false)]
   [System.Web.Script.Services.ScriptService]
   public class ClassName : System.Web.Service.WebService
   {
      [WebMethod(EnableSession = true)]
      public List<ReturnData> WebMethod(string param1)
      {
            .
            .
            .
      }
    }
}
<%@ WebService Language="C#" Class="ClientName.Version.Services.ClassName" %>
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="3600"
</asp:ScriptManager>
ScriptManager1.Services.Add(new ServiceReference("~/WebServices/Service.asmx"));