我在我的 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 类的名称相同之外,都是相同的。
最佳答案
该问题是由 ExceptionsJSONService 类中定义的公共(public)函数引起的。该函数应该是公开的,但它也被标记为操作合约。
该函数的参数列表中是我们的 EF DB 上下文对象。因为它位于操作契约的参数列表中,所以它导致服务搜索与数据库上下文关联的所有实体的数据契约。这导致抛出仅出现在服务跟踪日志中的异常。该异常导致服务无法正确加载,因此当我尝试在 JavaScript 中实例化服务客户端时,它会失败。
从函数中删除操作契约属性解决了该问题。
关于javascript - JSON 服务类未定义客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17299315/