私はhttp://localhost:8080でホストされているWCFサービスとhttp://localhost:82でWebアプリケーションを持っています。私はWindows 7 64ビットとIIS 7.5を持っています。WCFサービスを呼び出すときにFirefox 6でのみ "405メソッドは使用できません"がIE 9ではありません
Webアプリケーションのページは、jQueryを使用してAJAXリクエストをWCFサービスに送信します。
IEでは、サービスコールが正常に動作します。 Firefoxでは、405 Method Not Allowedというエラーが表示されます。 WebアプリケーションがASP.NETコードビハインドから行うサービス呼び出しは、常に成功します。
他の開発者のビルドにも同じ問題があります。私は当初、FF 3.5で導入されたクロスサイトのセキュリティ制限(この記事に基づいて、https://developer.mozilla.org/En/HTTP_access_control)と関係があると考えました。しかし、私が必要と思われるすべての応答ヘッダーを追加した後、問題はまだ発生しました。
私はaspnet_regiis.exeコマンドとWCF ServiceModelReg.exeコマンドを実行しました。ここで
は、Firefoxを作ることを要求される:ここでは
OPTIONS http://localhost:8080/ScoutService.svc/Contact_Add HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: http://localhost:82
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
は、サーバーからの応答です:
HTTP/1.1 405 Method Not Allowed
Cache-Control: private
Allow: POST
Content-Length: 1565
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=53pqdbqgtj2cfdvtqrikiewu; path=/; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: http://localhost:82
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Max-Age: 17280
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Credentials: true
Date: Thu, 15 Sep 2011 15:55:27 GMT
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Service</title>
</head>
<body>
<div id="content">
<p class="heading1">Service</p>
<p>Method not allowed.</p>
</div>
</body>
</html>
任意のアイデア?
ええ、私はすでにこの記事を見つけた動詞許可する必要があります。 .svcハンドラは既にすべての動詞を受け入れます。 FirefoxのHTTPアクセスコントロールについては、私がコピー/ペーストしたレスポンスからわかるように、私が必要とするレスポンスヘッダーと思われるものを追加しました。 – Tedderz
@Tedderz必要な応答ヘッダーを追加しましたが、405ではなく200応答を返す必要があります。 –
リンクに記載されている[WebInvoke(Method = "*")]属性が実際に見つかりませんでした。しかし、私はそれを追加すると、WCFはコンパイルエラーをスローします。契約 'xxxx'の操作 'xxxx'は、WebGetAttribute/WebInvokeAttributeでメソッド '*'を指定しますが、Methodの唯一の値はGETまたはPOSTです。他の値は、 'System.ServiceModel.Description.WebScriptEnablingBehavior'ではサポートされていません。どのようにこれを回避するためのアイデア?グーグルでは、何もかもをあまり出さないようです。 – Tedderz