vs2015开发webserver 返回json格式 实现图书编目数据接口

开发工具:vs2015社区版(免费哦)

需求:客户开发网站或者APP想通过isbn查询图书信息 需要返回json格式 。


因为本人专业搞图书编目marc数据,有专门的批量下载客户端 但这个是 delphi开发的 cs产品并不能满足客户需求。所以打算用vs2015来做个webserver实现。

接口类似这种应用聚合api,这也是客户提供给我参考的当时。我发现虽然这个公司融资2亿多 但命中率实在不高 。我的接口也开发完了命中率99%,测试地址

http://221.204.187.218:1605/WebService1.asmx/GetBookInfo?isbn=978-7-301-26746-2  参数isbn支持isbn 10/13位格式。

返回格式:




上代码 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Data;
using System.Data.SqlClient;
using System.Text;

namespace WebApplication1
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        //声明Soap头实例
        public MySoapHeader myHeader = new MySoapHeader();

        [System.Web.Services.Protocols.SoapHeader("myHeader")]
        [WebMethod]
        public string GetBookInfo(string isbn)
        {
           
         
            if (isbn.Trim() == "")
            {
                Message re = new Message();
                re.bingo = "0";
                return new JavaScriptSerializer().Serialize(re);
            }

            if ((isbn.IndexOf("-") > 0) && ((isbn.Length) == 17))
            {
                isbn = isbn.Replace("-", "");

            }
            else if ((isbn.IndexOf("-") > 0) && ((isbn.Length) == 13))
            {
                isbn = isbn.Replace("-", "");
                isbn = isbn10toean(isbn);

            }
            else if ((isbn.IndexOf("-") < 0) && ((isbn.Length) == 10))
            { isbn = isbn10toean(isbn); }


     
            if (myHeader.UserName.Equals("taide") & myHeader.PassWord.Equals("348007237"))
            {

                //指定Sql Server提供者的连接字符串
                string connString = "server=WIN-4864693DQZ7;database =marcstore;uid =sa;pwd=xxx";

                //建立连接对象
                SqlConnection Sqlconn = new SqlConnection(connString);
                //打开连接
                Sqlconn.Open();

                ////为上面的连接指定Command对象
                SqlCommand thiscommand = Sqlconn.CreateCommand();
                thiscommand.CommandText = "select * from nlc_api where [010a]='" + isbn + "'";
                ////为指定的command对象执行DataReader
                SqlDataReader thisSqlDataReader = thiscommand.ExecuteReader();

                if (thisSqlDataReader.HasRows)
                {

                    Message re = new Message();
                    re.bingo = "1";
                    List<BookInfo> mybook = new List<BookInfo>();
                    //Booklist bl = new Booklist();

                    while (thisSqlDataReader.Read())
                    {
                        BookInfo book1 = new BookInfo();
                        book1.f010a = thisSqlDataReader["010a"].ToString();
                        book1.f010b = thisSqlDataReader["010b"].ToString();
                        book1.f010d = thisSqlDataReader["010d"].ToString();

                        book1.f101a = thisSqlDataReader["101a"].ToString();
                        book1.f102a = thisSqlDataReader["102a"].ToString();
                        book1.f200a = thisSqlDataReader["200a"].ToString();

                        book1.f200d = thisSqlDataReader["200d"].ToString();
                        book1.f200e = thisSqlDataReader["200e"].ToString();
                        book1.f200f = thisSqlDataReader["200f"].ToString();

                        book1.f200g = thisSqlDataReader["200g"].ToString();
                        book1.f200h = thisSqlDataReader["200h"].ToString();
                        book1.f200i = thisSqlDataReader["200i"].ToString();
                        book1.f200v = thisSqlDataReader["200v"].ToString();
                        book1.f210a = thisSqlDataReader["210a"].ToString();
                        book1.f210c = thisSqlDataReader["210c"].ToString();
                        book1.f210d = thisSqlDataReader["210d"].ToString();
                        book1.f215a = thisSqlDataReader["215a"].ToString();
                        book1.f215d = thisSqlDataReader["215d"].ToString();
                        book1.f330a = thisSqlDataReader["330a"].ToString();

                        book1.f606a = thisSqlDataReader["606a"].ToString();
                        book1.f690a = thisSqlDataReader["690a"].ToString();

                        mybook.Add(book1);

                    }
                    re.books = mybook;
            
                    thisSqlDataReader.Close();
                    ////关闭连接
                    Sqlconn.Close();
           
                    return new JavaScriptSerializer().Serialize(re);
                }
                else
                {
                    //国图未命中  查询cip库 
                    thisSqlDataReader.Close();
                    ////关闭连接
                    //Sqlconn.Close();

                    thiscommand.CommandText = "select * from cip_api where [010a]='" + isbn + "'";
                    ////为指定的command对象执行DataReader
                    SqlDataReader dr_cip = thiscommand.ExecuteReader();

                    if (dr_cip.HasRows)
                    {

                        Message re = new Message();
                        re.bingo = "1";
                        List<BookInfo> mybook = new List<BookInfo>();
                        //Booklist bl = new Booklist();

                        while (dr_cip.Read())
                        {
                            BookInfo book1 = new BookInfo();
                            book1.f010a = dr_cip["010a"].ToString();
                            book1.f010b = dr_cip["010b"].ToString();
                            book1.f010d = dr_cip["010d"].ToString();

                            book1.f101a = dr_cip["101a"].ToString();
                            book1.f102a = dr_cip["102a"].ToString();
                            book1.f200a = dr_cip["200a"].ToString();

                            book1.f200d = dr_cip["200d"].ToString();
                            book1.f200e = dr_cip["200e"].ToString();
                            book1.f200f = dr_cip["200f"].ToString();

                            book1.f200g = dr_cip["200g"].ToString();
                            book1.f200h = dr_cip["200h"].ToString();
                            book1.f200i = dr_cip["200i"].ToString();
                            book1.f200v = dr_cip["200v"].ToString();
                            book1.f210a = dr_cip["210a"].ToString();
                            book1.f210c = dr_cip["210c"].ToString();
                            book1.f210d = dr_cip["210d"].ToString();
                            book1.f215a = dr_cip["215a"].ToString();
                            book1.f215d = dr_cip["215d"].ToString();
                            book1.f330a = dr_cip["330a"].ToString();

                            book1.f606a = dr_cip["606a"].ToString();
                            book1.f690a = dr_cip["690a"].ToString();

                            mybook.Add(book1);

                        }

                  
                        re.books = mybook;
                        dr_cip.Close();
                        ////关闭连接
                        Sqlconn.Close();
  
                        return new JavaScriptSerializer().Serialize(re);

                    }
                    else
                    {

                        dr_cip.Close();
                        ////关闭连接
                        Sqlconn.Close();
                        Message re = new Message();
                        re.bingo = "0";
                        //Context.Response.Write(new JavaScriptSerializer().Serialize(re));
                        // Context.Response.End();

                        return new JavaScriptSerializer().Serialize(re);
                    };
                };
            }
            else
            {  return "对不起,您没有权限调用此服务!"; };
         
        }

        public string isbn10toean(string isbn)
        {
            int sumOdd, sumEvEn, tmp;
            sumOdd = 0;
            sumEvEn = 0;

            string s = "978" + isbn.Substring(0, isbn.Length - 1);
            for (int i = 0; i < s.Length; i++)
            {
                if ((i % 2) == 0)
                {
                    sumEvEn = sumEvEn + int.Parse(s.Substring(i, 1));
                }
                else
                {
                    sumOdd = sumOdd + int.Parse(s.Substring(i, 1));
                }
            }
            tmp = sumEvEn + (sumOdd * 3);
            string tmp1 = tmp.ToString();
            tmp1 = tmp1.Substring(tmp1.Length - 1, 1);
            tmp = 10 - int.Parse(tmp1);

            //tmp = 10 - (sumEvEn + (sumOdd * 3)).ToString().Substring(length-1,1);
            if (tmp == 10)
            { tmp = 0; }
            return s + tmp.ToString();

        }

        public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
        {

            private string userName = string.Empty;
            private string passWord = string.Empty;

            /// <summary>
            /// 构造函数
            /// </summary>
            public MySoapHeader()
            {

            }

            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="userName">用户名</param>
            /// <param name="passWord">密码</param>
            public MySoapHeader(string userName, string passWord)
            {
                this.userName = userName;
                this.passWord = passWord;
            }

            /// <summary>
            /// 获取或设置用户用户名
            /// </summary>
            public string UserName
            {
                get { return userName; }
                set { userName = value; }

            }

            /// <summary>
            /// 获取或设置用户密码
            /// </summary>
            public string PassWord
            {
                get { return passWord; }
                set { passWord = value; }
            }
        }


        public class Message
        {
            public string bingo;
            //public Booklist books;
            public List<BookInfo> books;

        }
        public class Booklist
        {
            public List<BookInfo> Booklists { get; set; }
        }

        public class BookInfo
        {
            public string f010a { get; set; }
            public string f200a { get; set; }
            public string f200d { get; set; }
            public string f200e { get; set; }
            public string f200f { get; set; }
            public string f200g { get; set; }
            public string f200h { get; set; }
            public string f200i { get; set; }
            public string f200v { get; set; }
            public string f010d { get; set; }

            public string f101a { get; set; }
            public string f102a { get; set; }
            public string f210a { get; set; }
            public string f210c { get; set; }
            public string f210d { get; set; }
            public string f215a { get; set; }
            public string f215d { get; set; }
            public string f330a { get; set; }
            public string f606a { get; set; }
            public string f690a { get; set; }

            public string f010b { get; set; }


        }
    }
}


开始 使用了 json.net来返回json  因为是三方的 后来改用JavaScriptSerializer 方法。

代码里面 包含了 SOAP用户名密码认证  这样 提供给用户wsdl与用户名密码就可以了 。参考 http://www.cnblogs.com/mr-lee1976/p/4660159.html


函数 isbn10toean 是isbn10位转 isbn13位的 函数 主要是计算校验位


有需要图书数据接口的跟我联系 QQ:976809488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值