从javascript调用Web服务

时间:2011-07-02 10:04:54

标签: javascript asp.net web-services browser

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

http://localhost/RouteGen/Service.asmx

Web服务具有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";
    }
}

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

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

...
<body id="body1" onload="initialize()" style="behavior:url(webservice.htc)">
</body>
...

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

...
service_init();
processResult();

还有这个功能:

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

function processResult(result)
{
    alert(result);
}

我很满意:

1)在IE processResult()中返回“undefined”

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

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

2 个答案:

答案 0 :(得分:5)

在Aspx部分,

添加ScriptManager标记,如下所示,

        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                   <asp:ServiceReference  path="~/sample.asmx"/>
                </Services>
         </asp:ScriptManager>

在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>

请参阅下面的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";
                   }
            }
         }

希望这会有所帮助......

答案 1 :(得分:2)

ASMX是一个SOAP Web服务。 SOAP相对复杂。

将数据返回到浏览器的更好方法是使用REST。可以使用JQUERY使用REST服务。

您可以构建使用REST并返回JSON结果的WCF服务。

如果您的服务与您的网页不在同一台服务器上,则必须使用JSONP之类的服务来进行跨域调用。