簡體   English   中英

WCF javascript 跨域調用

[英]WCF javascript call cross domain

我是 javascript 的新手,我遇到了一個讓我很難過的問題。

我想在一個頁面中添加一個跟蹤 javascript。 該腳本將調用 wcf 服務來跟蹤客戶端瀏覽器信息、訪問的頁面和時間戳。 問題是我在 javascript 調用上得到:“405 Method Not Allowed”錯誤。 該服務將在另一個域上。 現在我在 localhost 上測試它。 該服務運行良好,因為我可以從瀏覽器的新頁面調用它。 你遇到過同樣的問題嗎? 我怎樣才能解決這個問題?

我的 javascript 代碼是:

Wcf 服務代碼:

[ServiceContract(Name = "CustomersAssistantService", Namespace = "CustomersAssistantService")]
public interface ICustomersAssistantService
{
    [OperationContract]
    [WebGet]
    string DoWork();

    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    string Sum(int n1, int n2);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CustomersAssistantService : ICustomersAssistantService
{
    public string DoWork()
    {
        return "work done";
    }

    public string Sum(int n1, int n2)
    {
        return (n1 + n2).ToString();
    }
}

Javascript 調用:

function CallWcf1(){
        var _I = this;
        var url = "http://localhost:58399/CustomersAssistantService.svc/customersAssistantService/";        

            var methodUrl = _I.serviceUrl + 'dowork';

             $.ajax( {
                        url: methodUrl,
                        data: '',
                        type: "GET",
                        processData: false,
                        contentType: "application/json",
                        timeout: 10000,
                        dataType: "text",  // not "json" we'll parse
                        success: 
                        function(res) 
                        {                                    
                            if (!callback) return;
                            // *** Use json library so we can fix up MS AJAX dates
                            var result = JSON2.parse(res);
                            // *** Bare message IS result
                            if (bare)
                            { callback(result); return; }
                            // *** Wrapped message contains top level object node
                            // *** strip it off
                            for(var property in result)
                            {
                                callback( result[property] );
                                break;
                            }                    
                        },
                        error:  
                        function(xhr)
                        {
                            if (!error) return;
                            if (xhr.responseText)
                            {
                                var err = JSON2.parse(xhr.responseText);
                                if (err)
                                    error(err); 
                                else    
                                    error( { Message: "Unknown server error." })
                            }
                            return;
                        }
                    });   
    }

難道我做錯了什么?

非常感謝, 拉杜 D

您遇到了 Same Origin Policy Ajax 請求僅限於與同源通信; 跨域請求通常會被拒絕。

根據您的需要,有多種方法:

  • 如果您的用戶將只使用非常現代的瀏覽器(因此,不是 IE7),您可以在您的服務器上實現跨域資源共享 這是 W3C 的標准,允許服務器開放對其資源的跨域訪問,但僅在現代瀏覽器中受支持。 (在 IE 上,它受支持,但不是通過通常的XMLHttpRequest object;相反,您必須使用XDomainRequest object。)
  • 您可以實現JSON-P 接口
  • 如果您只想向另一個域發送通知,您可以通過添加具有相關src屬性的元素從中加載資源(一個img 、一個script等); 但是,這意味着您僅限於使用應該用於冪等資源的GET方法。

據我所知,對 WCF 的請求必須使用 POST 方法,所以改為:

type: "POST", 

在 AJAX 調用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM