簡體   English   中英

WCF服務失敗,方法不允許

[英]WCF Service Failing With Method Not Allowed

我有一個JSON WCF服務,我寫了一些javascript來訪問這樣的服務,

function stuffClick2() {
        $.ajax({
            url: "http://192.168.54.98/JsonWCFService/Service1.svc/Post",
            type: "POST",
            contentType: "application/json",
            data: '{"x":"1","y":"2","message":"The answer is: "}',
            dataType: "html",
            success: function(data) { $('body').html(data); }     
        });
    }

我寫了一個HTML頁面,里面有上面的javascript。 HTML頁面使用IIS提供。

當我在PC上使用chrome訪問HTML頁面時,我看到這些操作按此順序發送到WCF JSON服務,

OPTIONS /JsonWCFService/Service1.svc/Post HTTP/1.1
POST /JsonWCFService/Service1.svc/Post HTTP/1.1

OPTIONS以前失敗了,但我讓OPTIONS調用返回這個標題然后使它工作,

Access-Control-Allow-Origin: *

但我上面定義的回調不起作用,

success: function(data) { $('body').html(data); } 

我知道WCF服務已經返回了這樣的東西,

<b> The answer is 3 </b>

但是當調用回調時,data的值是一個空字符串。

當我在不同的瀏覽器(IE)中運行html頁面時,它只會導致POST調用,而不是OPTIONS調用,那么它可以工作。 我注意到IE警告我它存在安全隱患,並詢問我是否要繼續。

當我嘗試使用WCF為我正在制作的移動HTML應用程序實現CORS時,我遇到了這個問題。 OPTIONS是一個預檢請求,用於在調用方法之前查看方法是否可用。

這將是你的問題:

  1. 我認為,OPTIONS默認關閉OPTIONS。 這可能是一個起點: http//www-jo.se/f.pfleger/cors-and-iis
  2. OPTIONS動詞將使其成為您實際的POST方法,因此您需要在WCF中將某些內容過濾OPTIONS到具有相同返回類型且無效的另一個方法。 並將POST動詞過濾為您的實際方法。 如果你不這樣做,你會發現你的方法被調用兩次的奇怪行為,或者它會拋出一個webservice模糊的異常。

我不確定您是否使用CORS,但主體將是相同的,因為它發送OPTIONS請求然后發送POST請求。

謝謝你的答案確實讓我走上了解決問題的道路。

當我使用其中使用的ajax javascript訪問HTML頁面時,我正在使用,

http://localhost/file.html

但是如果你看一下它正在使用的javascript訪問WCF服務,

http://192.168.54.98/JsonWCFService/Service1.svc/Post

如果我兩個都做

http://mymachinename.domain.com/JsonWCFService/Service1.svc/Post
http://mymachinename.domain.com/file.html

然后它無需調用OPTIONS操作即可運行。

這並不能解釋為什么OPTIONS然后來自chrome的POST不起作用。 Chrome似乎忽略了結果。

暫無
暫無

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

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