1

我试图弄清楚如何使常规 html 页面(使用 javascript)从我使用 Asp.Net 在 Visual Studio 中创建的 WebService 获取数据。我的最终项目是将 WebService 托管在一个域中,并且结果需要由另一个域中的 html 页面接收。

我很难弄清楚如何设置网络服务,以便我的页面可以与之对话。

我一直在努力追随:

http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

没有 JQuery 的 Ajax?

和这里的视频:http ://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-and-call-a-simple-web-service-in-aspnet

但我似乎无法解决这些问题。当我尝试使用 Firefox 加载页面时,没有返回任何内容。我几乎可以肯定问题与我尝试使用的 URL 有关,但我不知道它应该是什么。

使用javascript从函数HelloWorld2获取返回值的最佳方法是什么?

提前致谢。

网络服务

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

namespace StoneSoupMockup
{
    /// <summary>
    /// Summary description for WebService
    /// </summary>
    [WebService(Namespace = "http://SomeDumbUniqueID.org/", Description="This is a sample service for Stone Soup.", Name="MyService")]
    [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. 
     [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string HelloWorld2(string something)
        {
            return "Hello " + something;
        }
    }
}

我在我的 Web 服务项目的 web.config 中的 httpProtocol 中添加了访问控制标头,如下所示

<system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
      <httpProtocol>
          <customHeaders>
              <add name="Access-Control-Allow-Origin" value="*"/>
              <add name="Access-Control-Allow-Headers" value="Content-Type" />
          </customHeaders>
      </httpProtocol>
  </system.webServer>

JavaScript:

//WebServices.js
function myAjax() {
     var xmlHttp = new XMLHttpRequest();

     //I'm really not sure about this URL. This is what Visual Studio has for the 
     //URL when I test my app
     var url="http://localhost:62033/Service1.asmx/HelloWorld2";
     //var parameters = "first=barack&last=obama";
     var parameters = "something=timmy"
     xmlHttp.open("POST", url, true);

     //Black magic paragraph
     xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xmlHttp.setRequestHeader("Content-length", parameters.length);
     xmlHttp.setRequestHeader("Connection", "close");

     xmlHttp.onreadystatechange = function() {
      if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
       document.getElementById('ajaxDump').innerHTML+=xmlHttp.responseText+"<br />";
      }
     }

     xmlHttp.send(parameters);
}

HTML 代码:

<html>  
    <head>  
        <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
        <meta content="utf-8" http-equiv="encoding">

        <script src="WebServices.js" type='text/javascript'></script>


    </head>
    <body>

    <div id="resultdiv"></div>


    <script type='text/javascript'>
        myAjax();   
    </script>

    </body>
</html>
4

1 回答 1

1

您需要一个 CORS 库作为服务的一部分。如果您现在需要它,请查看 Thinktecture IdentityModel 库:

http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/

否则等待 WebAPI 的下一个版本:

http://brockallen.com/2013/03/13/cors-open-source-contribution-to-asp-net-and-system-web-cors/

http://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API

于 2013-06-14T03:00:01.143 回答