9

サイトのテストコピーをasp.net4.0にアップグレードしたところ、サイトをサーバーにアップロードしたときにのみ発生する奇妙な問題に気づきました。

サイトにはjsonを返すasmxWebサービスがありますが、サーバーでサイトを実行するとxmlが返されます。asp.net3.5では1年以上正常に機能しています。

webMethodは正しい属性で装飾されています...

[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<LocationRecentChange> RecentChanges()

そして私のローカルマシンではjsonを返します。

それでもサーバー(Windows 2008 64ビット)ではxmlを返します。

firebugコンソールを使用すると、200 OKの応答と一連のXMLが表示され、私のローカルマシンでは、返されるデータは私が期待するJSONです。

これがサービスを呼び出すjavascriptです。

function loadRecentData() {
$.ajax({
    type: "POST",
    url: "service/spots.asmx/RecentChanges",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: loadRecentUpdates,
    failure: function(msg) {
        //alert(msg);
    }
});

}

どんな提案も歓迎します、これは私を困惑させました!

4

2 に答える 2

7

.NET 4がサーバーにインストールされていますか?

.NET4でのScriptHandlerFactoryの「タイプ」文字列は次のとおりです。

System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

ASP.NET 4では、これがマシンレベルのデフォルトのweb.configに含まれるようになりました。したがって、プロジェクトのweb.config、3.5または4のScriptHandlerFactoryへのマッピングは必要ありません。

于 2010-05-05T15:32:59.977 に答える
2

よく私はajaxウェブサービスのリクエストがここで処理されることについて読むことによってそれを追跡することができました...

http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/ajax/tutorial-05-cs.aspx

基本的に、asp.net 3.5のハンドラーは、デフォルトの代わりにJSON応答を返すことができるように、system.webserverの下のweb.configハンドラーセクションで宣言する必要があります。

これがweb.configハンドラーセクションに追加する必要があるものです(IIS6をサポートする必要がある場合はhttpHandlersセクションにも追加してください)...

<handlers>
   <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

同じハンドラーの.net4.0バージョンに置き換える必要があるのではないかと疑っていますが、今のところは機能します。

于 2010-05-01T14:10:40.853 に答える