通过jQuery调用JSON wcf服务

时间:2011-09-02 08:10:50

标签: jquery asp.net wcf

我有问题,根据jQuery调用aspx页面中的json wcf方法。

这是我的测试方法:

    [ServiceContract]
    public interface IEParcelService
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "Test")]
        Response<string> Test();
    }

  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  public class EParcelServiceImpl : IEParcelService
  {    
    public Response<string> Test()
    {
      return WebServiceHelper.Execute(() => "Test Message");
    }    
  }

此服务部署到IIS。 当我从Chrome调用此方法时:http://localhost/TestService/ServiceImpl.svc/Test 一切都很好,我可以看到结果。但是当我从jQuery调用它时 我有错误:NETWORK_ERR:XMLHttpRequest异常101.我尝试在Google中找到解决方案。 但结果并不成功。我怎么解决呢?

jQuery调用:

<script language="javascript">
  $().ready(function () {
            $("#myButt").click(function () {

                $.ajax({
                    cache: false,
                    async: false,
                    type: "GET",
                    url: "http://localhost/EParselService/EParcelServiceImpl.svc/Test",
                    contentType: "application/json",
                    dataType: "json",
                  success: function (data, textStatus){
                                alert('successCallBack called');
                                alert(data);
                                alert(textStatus);
                         },
                   error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert('errorCallBack called');
                            alert('textStatus = ' + textStatus + '/nerrorThrown = ' + errorThrown);
                        } 
                 });
                alert('Done!');
            });
        });
</script>

<input type="button" value="Get values from server" id="myButt" />

1 个答案:

答案 0 :(得分:1)

所以这是一个同源问题。 (见here

对于XMLHttpRequest,资源必须与请求它的页面位于完全相同的域中。这是为了防止XSS(见here)atacks。如果你想使用来自不同域的资源,你将不得不使用像jsonp这样的东西。 (参见here)有关如何使用WCF执行此操作的好教程。