android – 使用jQuery访问拒绝错误[在localhost上运行正常]

从jQuery调用WCF方法时遇到错误.
当我在localhost上实现它时,调用返回正常,但当服务托管在单独的服务器上时,会抛出拒绝访问错误.

以下是重现错误的步骤: –

>在本地运行项目并检查服务是否正在运行
e.g.:http://localhost:3369/AppsterWcfService.svc/DoWork
>在本地创建测试客户端(test.html)页面并运行此项目.
单击登录按钮时,它可以正常工作.
>现在在远程服务器上托管服务,并将url替换为托管服务的新url即url.
>现在运行test.html页面,单击按钮.在这里我得到访问被拒绝错误.

我尝试了各种访问服务器的方法,例如:

>通过使用MVC
>处理程序
>简单的.aspx页面
>在jquery ajax调用和web.config文件添加不同的参数.
>在iis中赋予不同的权限.喜欢网络服务,iuser,匿名,嘉宾等

我想这是与jQuery有某种跨域相关的问题.
任何帮助将不胜感激.

谢谢,
-Sumit

解决方法

要使用jQuery使用跨域WCF REST服务,请在下面找到示例:

我的服务如下:

[ServiceContract]
    public interface IJSONPService
    {
        [OperationContract]
        [WebGet]
        string GetDate();

        [OperationContract]
        [WebInvoke]
        string PostData(string name);
    }

现在我对上述服务的配置条目如下所示:

<services>
    <service name="Service.JSONPService">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="json" bindingConfiguration="defaultRestJsonp" contract="Service.IJSONPService">
        </endpoint>
    </service>
</services>
<behaviors>
      <endpointBehaviors>
         <behavior name="json">
             <enableWebScript />
         </behavior>
   </behaviors>
</endpointBehaviors>
<webHttpBinding>
        <binding name="defaultRestJsonp" crossDomainScriptAccessEnabled="true">
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="64" maxNaMetableCharCount="2147483647" />
          <security mode="None" />
        </binding>
</webHttpBinding>

您需要记下绑定元素“defaultRestJsonp”中的crossDomainScriptAccessEnabled属性,该属性负责确定对JSONP的请求,并从作为查询字符串的URL中适当地转换要包装在回调方法中的响应

现在从您的页面执行以下JavaScript调用上面的WCF REST服务,如下所示:

function TestingWCFRestWithJsonp() {
                $.ajax({
                    url: "http://domain.com/Service/JSONPService.svc/GetDate",dataType: "jsonp",type: "GET",timeout: 10000,jsonpCallback: "MyCallback",success: function (data,textStatus,jqXHR) {
                        alert(data);
                    },error: function (jqXHR,errorThrown) {alert('error');

                    },complete: function (jqXHR,textStatus) {alert('complete');
                    }
                });
            }
            function MyCallback(data) {
                alert(data);
            }

查看$.ajax方法调用中的jsonpCallback属性.

对Web服务调用的原始请求如下所示:

GET http://localhost/Service/JSONPService.svc/GetDate?callback=MyCallback&_=1343391683779 HTTP/1.1
Host: localhost
Connection: keep-alive

WCF REST服务的原始响应如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/x-javascript
Date: Fri,27 Jul 2012 12:21:23 GMT
Content-Length: 27

MyCallback("27\/07\/2012");

注意:执行JSONP请求时,不会调用$.ajax方法错误/完成/成功.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...