【问题标题】:Need Help with ASP.NET (3.5) ScriptManager to call WCF JSON Data via AJAX需要 ASP.NET (3.5) ScriptManager 的帮助以通过 AJAX 调用 WCF JSON 数据
【发布时间】:2009-07-27 17:44:57
【问题描述】:

我正在尝试让 ASP.NET(框架 3.5)、AJAX 和 JSON 工作。我有两个问题。首先是,当我按照 ASP.NET 的要求添加以下标记时:

[AspNetCompatibilityRequirements(RequirementsMode = 
      AspNetCompatibilityRequirementsMode.Allowed)]

我发现我不能将它添加到接口声明之上,只能添加一个类。我希望这段代码成为一个接口。有人可以告诉我我做错了什么吗?错误如下:

属性 AspNetCompatibilityRequirements 不是 在此声明类型上有效。这是 仅对“类”声明有效。

    [ServiceContract(Namespace = "API.Trade")]
    [AspNetCompatibilityRequirements(RequirementsMode = 
        AspNetCompatibilityRequirementsMode.Allowed)]
    public interface ITradeService
    {
        [OperationContract(Name = "GetAllCategories")]
        string GetCategories(string itemtype, string keywordstring);

        [OperationContract(Name = "GetCategoryByNodeLevel")]
        string GetCategories(int NodeLevel); 

        [OperationContract]
        int GetTrades(string KeywordString, string TradeType);
    }

第二个问题是,在 ASPX ScriptManager 标记中:

 <asp:ScriptManager ID="ScriptManager1" runat="server">
 <Services>
 <asp:ServiceReference Path="?" />
 </Services>
 </asp:ScriptManager>

我注意到 Path= 属性应该指向一个 .SVC 文件。到目前为止,我有 成功地使用 WCF 类库来完成我所需要的。类库 有我编译然后的 Trade.cs、TradeService.cs 和 ITradeService.cs 文件 在我的 Web 项目中作为我的 Web 服务引用。

那么,“Path=”应该指向什么?或者,我需要添加什么?

我边走边学,感谢您的耐心。提前致谢。

【问题讨论】:

    标签: asp.net ajax wcf scriptmanager


    【解决方案1】:

    关于第一个问题。该属性被定义为仅适用于一个类,因此您不能在其他任何东西上声明它。

    路径应指向您的服务正在侦听的端点(例如 /services/myserivce)。

    【讨论】:

      【解决方案2】:

      路径应该是 HTTP 服务的服务端点:http://host.example.com/tradeservice.svc/method

      您只能将属性应用于接口(类)的实现,而不是接口本身。

      【讨论】:

        【解决方案3】:

        至于你的第二个答案。我相信路径需要指向一个实际的 web 服务端点(.svc 或旧的。我忘记了,抱歉)。

        您可以做的是创建一个 WebService,TradeService.svc,并实现 ITradeService 接口。作为服务上的私有变量,创建一个 TradeService 实例,并将其用作代理......就像这样

        private TradeService _proxy;
        
        public string MyMethod(){
            _proxy.MyMethod();
        }
        

        有意义。

        【讨论】:

        • 嗨 Aquillin,谢谢。我明白你在说什么,但我正在关注如何公开我在我的类库中创建的接口。我假设我需要向 ITradeService 添加一个 USING 指令,然后引用 DLL 中的接口方法 (MyMethod),然后我可以在“_proxy.MyMethod”中使用它。我不太确定如何解决这个问题 - 在添加了我拥有的 WCF 类库后,你能告诉我 ITradeService 的代码应该是什么样子吗?我希望我在这里说得通...
        【解决方案4】:
        • AspNetCompatibilityRequirementsAttribute.RequirementsMode 不是必需属性,可用于以编程方式设置托管模式 或者您也可以这样做 在 webconfig 中使用 serviceHostingEnvironment 标签:

        参考:http://msdn.microsoft.com/en-us/library/system.servicemodel.activation.aspnetcompatibilityrequirementsattribute.requirementsmode(v=vs.110).aspx

        • 您应该通过手动添加在项目中添加服务主机 (.svc) 贸易服务.svc.您也可以通过添加新项目 > WCF 来做同样的事情 服务,但这将覆盖您的服务 cs 文件。一旦你有 添加您的 svc 文件,然后您可以添加以下行:
        &lt%@ ServiceHost Language="C#" Debug="true" Service="TradeService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>

        请注意,WebScriptServiceHostFactory 会自动将 ASP.NET Ajax 端点添加到您的服务中。最后将您的“路径”属性指向这个新创建的“TradeService.svc”。

        您可以通过访问http://localhost.me/TradeService.svc来测试您的服务

        可以在http://localhost.me/TradeService.svc/jsdebug 测试 Ajax 支持

        参考:http://berniecook.wordpress.com/2012/01/08/consuming-a-wcf-service-with-jquery-or-scriptmanager/

        源码:https://docs.google.com/open?id=0Bz2usIBCcor0NDQxZDc2ODYtNTUzMi00OTRlLTlhOGMtMGI4Y2RhNGIzYWNj

        【讨论】:

          猜你喜欢
          • 2022-01-18
          • 1970-01-01
          • 2012-08-17
          • 1970-01-01
          • 2020-03-21
          • 1970-01-01
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          相关资源
          最近更新 更多