我的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类的名称之外,它们是相同的。
答案 0 :(得分:0)
问题是由ExceptionsJSONService类中定义的公共函数引起的。该功能应该是公开的,但它也被标记为操作合同。
在函数的参数列表中是我们的EF DB上下文对象。因为它位于操作合同的参数列表中,所以它使服务搜索与数据库上下文关联的所有实体的数据合同。这导致抛出只出现在服务跟踪日志中的异常。该异常阻止了服务正确加载,所以当我尝试在javascript中实例化服务客户端时,它会失败。
从功能中删除“操作合同”属性解决了问题。