2013-10-13 32 views
0

我正在编写一个网站,该网站使用了一个dotnet休息Web服务。我完全控制这两个项目。网络错误405:从浏览器发布到Localhost WCF REST Web服务

就在今天,我实现了一个后期Web服务。当我和Fiddler一起发布时,它就可以工作。今天早上我从网站上跑了一些测试,一切似乎都没问题。我处理另一个问题(使用提琴手获得帖子内容),然后我从浏览器返回发布,但现在整个网站展示CORS行为 - 空白返回等。此外,刚刚实施的帖子刚开始返回405方法不允许错误

"NetworkError: 405 Method Not Allowed - http://localhost:50122/MyService/ListMarkers" 

下面是网站代码:

function postAjax(){ 
    var markers = 
    { "listmarkers": 
    [{ "position": "128.3657142857143", "markerPosition": "7" }, 
        { "position": "235.1944023323615", "markerPosition": "19" }, 
        { "position": "42.5978231292517", "markerPosition": "-3" }] 
    }; 

    $.ajax({ 
     type: "POST", 
     url: window.url + "/PocShimService.svc/ListMarkers", 
     // The key needs to match your method's input parameter (case-sensitive). 
     data: JSON.stringify(markers), 
     //data: markers, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(data){alert(data);}, 
     failure: function(errMsg) { 
      alert(errMsg); 
     } 
    }); 

} 

这是具有访问控制做服务器的配置:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    </customHeaders> 
</httpProtocol> 

任何想法?建议?

+0

后您的服务代码... – Lev

回答

1

如果您的域名同为WCF和客户端应用程序,那么你必须尝试window.location.origin而不是window.url。您的Ajax请求应该看起来像

$.ajax({ 
    type: "POST", 
    url: window.location.origin + "/PocShimService.svc/ListMarkers", 
    // The key needs to match your method's input parameter (case-sensitive). 
    data: JSON.stringify(markers), 
    //data: markers, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data){alert(data);}, 
    failure: function(errMsg) { 
     alert(errMsg); 
    } 
}); 
+0

这没有工作,我需要的网站移动到相同的URL /端口的Web服务。我想避免将网站放在与我的网络服务相同的位置。有什么建议? –

+0

在这种情况下,您必须在服务器端调用WCF,因为跨浏览器安全问题 –