1

私のasp.net Webサイトでajax呼び出しを介して使用されるJSONサービスクラスがたくさんあります。数日前まで、すべてが正常に機能しており、クラスの 1 つがクライアント側で表示されなくなりました。

それは ExceptionsJSONService と呼ばれ、JavaScriptでインスタンス化しようとすると

var service = new ExceptionsJSONService();

「オブジェクトが必要です」と表示されます。正常に機能していたので、何が変わったのかわかりません。web.config を確認しましたが、サービスは次のように定義されています。

    <behavior name="ExceptionsJSONServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>

以降:

  <service name="ExceptionsJSONService">
    <endpoint address="" behaviorConfiguration="ExceptionsJSONServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="ExceptionsJSONService" />
  </service>

これは、次の ScriptManager を介してマスター ページで定義されます。

<asp:ServiceReference Path="~/Services/ExceptionsJSONService.svc" />

以下を含むサービスファイルがあります。

<%@ ServiceHost Language="C#" Debug="true" Service="ExceptionsJSONService" CodeBehind="~/App_Code/ExceptionsJSONService.cs" %>

そして、実際のクラス定義ファイルがあり、そのヘッダーは次のとおりです。

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExceptionsJSONService : BaseJSONService {}

長さのためにクラスの本体を省略しましたが、正常に構築され、他のすべての JSONService クラスの名前を除いて同一です。

4

1 に答える 1

0

この問題は、ExceptionsJSONService クラスで定義された public 関数が原因でした。関数は公開されているはずですが、操作契約としてもマークされていました。

関数のパラメーター リストには、EF DB コンテキスト オブジェクトが含まれていました。これはオペレーション コントラクトのパラメーター リストに含まれていたため、サービスは DB コンテキストに関連付けられたすべてのエンティティのデータ コントラクトを検索しました。これにより、サービス トレース ログにのみ表示される例外がスローされました。例外により、サービスが適切にロードされないため、JavaScript でサービス クライアント側をインスタンス化しようとすると失敗します。

関数から Operation Contract 属性を削除すると、問題が解決しました。

于 2013-07-18T19:41:36.753 に答える