从javascript调用Web服务

Ily*_*okh 4 javascript browser asp.net web-services

我在ASP.NET中编写了Web服务,它有这样的地址:

http://localhost/RouteGen/Service.asmx
Run Code Online (Sandbox Code Playgroud)

Web Service具有Web方法GetMessage,它不接受任何参数并返回字符串.

它可以使用Web服务,我可以从其他ASP.NET应用程序甚至是Android应用程序调用它的方法.

服务器代码:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    [WebMethod]
    public string GetMessage() {
        return "Hello World";
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要GetMessage从javascript 调用web方法.

html页面:(这个网页与网络服务代码没有任何联系,它完全是另一个项目!你可以认为它是用win记事本写的)

...
<body id="body1" onload="initialize()" style="behavior:url(webservice.htc)">
</body>
...
Run Code Online (Sandbox Code Playgroud)

在我调用的initialize()方法中:

...
service_init();
processResult();
Run Code Online (Sandbox Code Playgroud)

还有这个功能:

function service_init()
{   
    body1.useService("http://localhost/RouteGen/Service.asmx?WSDL","TheService");   
    body1.TheService.callService("GetMessage");
}

function processResult(result)
{
    alert(result);
}
Run Code Online (Sandbox Code Playgroud)

所以我有点:

1)在IE中processResult()返回"undefined"

2)在Chrome和FireFox中它根本不起作用(在useService之后没有出现简单警报)

问题在哪里?如何使javascript正常调用web方法并从不同的浏览器调用?

Har*_*run 5

在Aspx部分,

添加ScriptManager标记,如下所示,

        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                   <asp:ServiceReference  path="~/sample.asmx"/>
                </Services>
         </asp:ScriptManager>
Run Code Online (Sandbox Code Playgroud)

在JavaScript中调用Web服务(sample.asmx)如下,

<script language="javascript" type="text/javascript">

  function CalledOnAnyClientClickEvent()
  {
     var parameter1="dsfsfs"; 

     NameSpace1.WebService1.HelloWorld(parameter1,OnSucess,OnFail);
  }
   function OnSuccess(asd)
   {
      alert(asd);//result will contain the return parameter from web service
   }

   function OnFail(asd)
   {
      alert(asd);
   }
</script>
Run Code Online (Sandbox Code Playgroud)

请参阅下面的Asmx部分(sample.asmx),

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Web;
          using System.Web.Services;

          using System.Web.Script.Serialization;
          using System.Web.Script.Services;

          namespace NameSpace1
          {
            /// <summary>
            /// Summary description for WebService1
            /// </summary>
           [WebService(Namespace = "http://tempuri.org/")]
           [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]     
            [System.ComponentModel.ToolboxItem(false)]

           // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
           [ScriptService]

           public class WebService1 : System.Web.Services.WebService
           {

                  [WebMethod]
                   public string HelloWorld(string par1)
                   {
                        //do your logic here

                       return "Hello World";
                   }
            }
         }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...