代码之家  ›  专栏  ›  技术社区  ›  Pete

需要有关ASP.NET(3.5)ScriptManager的帮助才能通过AJAX调用WCF JSON数据

  •  0
  • Pete  · 技术社区  · 16 年前

    我正在尝试让ASP.NET(Framework 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=”应该指向什么?或者,我需要补充什么?

    我边走边学,我很感激你的耐心。提前谢谢。

    4 回复  |  直到 16 年前
        1
  •  0
  •   Paul van Brenk    16 年前

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

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

        2
  •  0
  •   tvanfosson    16 年前

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

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

        3
  •  0
  •   alanquillin    16 年前

    至于你的第二个答案。我认为路径需要指向一个实际的webservice端点(.svc或旧的端点。。我忘记了,对不起。

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

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

    说吧。

        4
  •  0
  •   Shawinder Sekhon Matthew    11 年前
    • AspNetCompatibilityRequirementsAttribute.RequirementsMode不是必需的属性,可以用于以编程方式设置宿主模式,也可以执行相同的操作 在webconfig中,使用serviceHostingEnvironment标记:
        <system.serviceModel> 
        <serviceHostingEnvironment ..>
        </serviceHostingEnvironment>
        </system.serviceModel>
    

    参考: 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终结点添加到您的服务。最后将您的“path”属性指向这个新创建的“TradeService.svc”。

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

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

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

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

    推荐文章