1

我在我的 asp.net 网站中有一堆通过 ajax 调用使用的 JSON 服务类。直到几天前,所有课程都运行良好,其中一个课程停止在客户端可见。

它被称为 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 类中定义的公共函数引起的。该功能应该是公开的,但它也被标记为操作合同。

在函数的参数列表中是我们的 EF DB 上下文对象。因为它位于操作合同的参数列表中,所以它导致服务搜索与数据库上下文关联的所有实体的数据合同。这导致抛出仅显示在服务跟踪日志中的异常。该异常阻止了服务正确加载,因此当我尝试在 javascript 中实例化服务客户端时,它会失败。

从函数中删除 Operation Contract 属性解决了该问题。

于 2013-07-18T19:41:36.753 回答