zoukankan      html  css  js  c++  java
  • WCF for ajaxToolkit:AutoCompleteExtender

    今天学习WCF,做了一个练习,最终的效果:

    在数据库中创建表,插入数据,写好存储过程:

    View Code
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[Catalog](
        [Catalog_nbr] [smallint] IDENTITY(1,1) NOT NULL,
        [CatalogName] [nvarchar](100) NOT NULL,
     CONSTRAINT [PK_Catalog] PRIMARY KEY CLUSTERED 
    (
        [Catalog_nbr] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    INSERT INTO [dbo].[Catalog] VALUES 
    (N'1120934567'),
    (N'1034577856'),
    (N'1145324576'),
    (N'1034567889'),
    (N'Adfgjfghgg'),
    (N'ae45654657'),
    (N'1dhjyuryr5'),
    (N'brt4543w34'),
    (N'brsa2346gh'),
    (N'345gthu865'),
    (N'3uettr43f5'),
    (N'dgewqrytr4'),
    (N'dgh6876532')
    
    GO
    
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-01-18
    -- Description:    Get Catalog data for web services。
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_Catalog_GetCatalogForWcfService]
    (
        @PrefixText NVARCHAR(MAX),
        @Count INT
    )
    AS    
    DECLARE @W NVARCHAR(MAX) = @PrefixText + '%'
    EXECUTE('SELECT TOP (' + @Count + ') [CatalogName],[Catalog_nbr] FROM [dbo].[Catalog] WHERE [CatalogName] LIKE ''' + @w +'''')
    
    
    GO


    在站点下,添加一个目录WCF,然后添加一个WCF Service,取名为Catalog.svc

    <%@ ServiceHost Language="C#" Debug="true" Service="Insus.NET.Catalog" CodeBehind="~/App_Code/Catalog.cs" %>

    上面的HTML注意一下Service属性,它应该包含命名空间与类别,更多参考:http://www.cnblogs.com/insus/archive/2013/01/19/2867629.html

    接下来,我们应该看到App_Code目录有两个文件ICatalog接口与Catalog.cs类文件。

    ICatalog
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ICatalog" in both code and config file together.
    namespace Insus.NET
    {
        [ServiceContract]
        public interface ICatalog
        {
            [OperationContract]
            [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]
            List<string> GetCatalog(string prefixText, int count);
        }
    }
    Catalog.cs
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using System.Text;
    using System.Web;
    using System.Web.Script.Serialization;
    
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Catalog" in code, svc and config file together.
    namespace Insus.NET
    {
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class Catalog : ICatalog
        {
            BusinessBase objBusinessBase = new BusinessBase();
    
            public List<string> GetCatalog(string prefixText, int count)
            {
                Parameter[] parameter = { 
                                        new Parameter ("@PrefixText",SqlDbType.NVarChar,-1,prefixText),
                                        new Parameter ("@Count",SqlDbType.Int,4,count)
                                    };
    
                DataTable objDatTable = objBusinessBase.GetDataToDataSet("usp_Catalog_GetCatalogForWcfService", parameter).Tables[0];
                List<string> catalog = new List<string>();
    
                foreach (DataRow dataRow in objDatTable.Rows)
                {
                    string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(dataRow["CatalogName"].ToString(),dataRow["Catalog_nbr"].ToString());
                    catalog.Add(item);
                }
    
                return catalog;
            }
        }
    }


    写好接口与类别之后,在站点添加一个.aspx,如Default.aspx:

    View Code
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    Catalog:
                    <asp:TextBox ID="TextBoxCatalog" runat="server"></asp:TextBox>
                    <ajaxToolkit:AutoCompleteExtender ServiceMethod="GetCatalog"
                        MinimumPrefixLength="1" ServicePath="~/WCF/Catalog.svc"
                        TargetControlID="TextBoxCatalog"
                        ID="AutoCompleteExtender1" runat="server" FirstRowSelected="false">
                    </ajaxToolkit:AutoCompleteExtender>
                </ContentTemplate>
            </asp:UpdatePanel>
    
        </form>
    </body>
    </html>


    ok,我们可以试运行一下看看。此时看到的,没有任何效果喔,为何,难道上面写的代码有错误?

    哦,原来我们少了在Web.config配置<system.serviceModel>,Insus.NET已经配置好,参考就是了:

    Web.config
    <?xml version="1.0"?>
    
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    
    <configuration>
      <connectionStrings>
        <add name="InsusConnectionString" connectionString="Server=127.0.0.1\SQLSERVER2008R2;Initial Catalog=InsusSite;User ID=siteconnlogin;Password=aa43$98;Packet Size=8192;Max Pool Size=1000;" providerName="System.Data.SqlClient"/>
      </connectionStrings>
      <system.web>
        <compilation debug="false" targetFramework="4.0" />
        <pages>
          <controls>
            <add namespace="AjaxControlToolkit" assembly="AjaxControlToolkit" tagPrefix="ajaxToolkit"/>
          </controls>
        </pages>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <endpointBehaviors>
            <behavior name="CatalogAspNetAjaxBehavior">
              <enableWebScript />
            </behavior>      
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior name="CatalogBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>        
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
          multipleSiteBindingsEnabled="true" />
        <services>
          <service behaviorConfiguration="CatalogBehavior" name="Insus.NET.Catalog">
            <endpoint address="" binding="webHttpBinding" contract="Insus.NET.ICatalog" behaviorConfiguration="CatalogAspNetAjaxBehavior">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>    
        </services>
      </system.serviceModel>
    </configuration>

  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/insus/p/2867840.html
Copyright © 2011-2022 走看看