最近做了一个web服务,开始什么也不懂,就在网上到处找,对于刚毕业的我,感觉没用实际代码经过自己的手写出来,看什么都一头雾水,然后就看到很多人说webservice已经融入WCF..然后就先创建了WCF..结果感觉不是我想要的 ....,经过很多次以后,其实webservice 也可以单独分出来.然后就来做做笔记,希望大神能指点

1.首先创建web

然后在添加完成的应用程序里面点右键添加,新建项

好了这样就创建好了一个服务..

2 然后,接着开始写webservice 封装接口..为了方便以后扩展首先分层BLL,DAL,Model,Web(这里补充一下,数据库用的是Sybase)

所以现在配置文件connectionStrings下面配置数据库

<connectionStrings>
<!--DSN ODBC数据源-->
<add name="DSN" connectionString="数据库名"/>
<!--加密锁配置-->
<add name="organ" connectionString=""/>
<add name="lockip" connectionString="地址"/>
<add name="nature" connectionString=""/>
</connectionStrings>(这里好像在配置sybase时可以自动就生成了)

3.然后开始写方法了..

先创建一个相关类

public partial class AddTea
{
public AddTea()
{
this.TeaID = "";
this.Name = "";
}
public AddTea(string _teaid,string _name)
{
this.TeaID = _teaid;
this.NAME = _name;
}
/// <summary>
/// 编码
/// </summary>
public string TeaID { get; set; }
/// <summary>
/// 名称
/// </summary>
public string NAME { get; set; }
}

方法:

   #region 添加方法--方法上面必须加上[WebMethod]
/// <summary>
/// 添加方法
/// </summary>
/// <param name="data">调用时传进来的参数(json字符串)</param>
[WebMethod]
public string Addtea(string data)
{
string json = "";
//序列化传进来的字符串(序列化的时候AddTea是自己根据业务创建的一个实体类然后进行序列化)
AddTea add = JSONSerializer.Deserialize<AddTea>(data);
//调用业务层添加方法这里面的//GetCon是一个通过机构号获取门店数据库连接密码 返回链接字符串
json = this.AddTeaBLL.AddTea(add, GetCon());
//判断json是否为空
if(!string.IsNullOrEmpty(json))
{
//成功时相应的数据
return "{\"FALSE\":\"0\",\"msg\":\"成功!\"}";
}
else
{
//失败是的处理
return "{\"FALSE\":\"0\",\"msg\":\"成功!\"}";
}
}
#endregion
}

BLL,DAL层相关

//BLL
AddteaDAL addteaDAL = new AddteaDAL();
/// <summary>
/// 添加
/// </summary>
/// <param name="_addtea">添加类</param>
/// <param name="con">字符串连接</param>
/// <returns></returns>
public string AddTea(Addtea _addtea, string _con)
{
return this.addteaDAL.AddTea(_addtea, _con);
}
//DAL
/// <summary>
/// 添加
/// </summary>
/// <param name="_data"></param>
/// <param name="_con"></param>
public string AddTea(AddTea _data, string _con)
{
string sql = "insert into AddTea(ID,PRICE)VALUES(:ID,:PRICE)";
OdbcParameter[] parmbm = new OdbcParameter[] {
new OdbcParameter("ID",data.ID),
new OdbcParameter("PRICE",data.PRICE)
};
Helper.ExecuteNonQuery(sqlbm, con, parmbm); //调用存储过程需要的参数
OdbcParameter[] odbcparm = new OdbcParameter[] { new OdbcParameter(), new OdbcParameter() };
odbcparm[].OdbcType = OdbcType.NVarChar;
odbcparm[].ParameterName = ":TeaID";
odbcparm[].Value = data.TeaID; odbcparm[].OdbcType = OdbcType.NVarChar;
odbcparm[].ParameterName = ":NAME";
odbcparm[].Value = data.NAME; //调用存储过程(?号代表参数,一个问号代表一个参数)
    //returnvalue接受存储过程返回的错误信息
object returnvalue=Helper.ExecuteNonQuery("存储过程名 ?,?", con, CommandType.StoredProcedure, odbcparm)
}
  上面执行存储过程的方法是重载的一个添加方法只是多了一个(CommandType参数)
 

}

 

这是上面存储过程重载的一个方法和错误日志记录的方法

     /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="con"></param>
/// <param name="_commandType"></param>
/// <param name="spms"></param>
/// <returns></returns>
public static object ExecuteNonQuery(string sql, string con, CommandType _commandType, params OdbcParameter[] spms )
{
OdbcCommand command = PrepareCommand(sql, con, spms);
command.CommandText = sql;
command.CommandType = CommandType.StoredProcedure;
//command.Parameters.Add("SQLCODE","").Direction = ParameterDirection.ReturnValue;
object result = "";
try
{
if (_commandType == null)
{
command.CommandType = CommandType.Text;
}
else
{
command.CommandType = _commandType;
}
command.Connection.Open();
result = command.ExecuteScalar();
//result += command.Parameters["SQLCODE"].Value.ToString(); }
catch (Exception e)
{
result=e.Message;//接受错误信息返回去
WriteError(e,"");//记录错误日志 }
finally
{
if (command.Connection.State != ConnectionState.Closed)
command.Connection.Close();
} return result;
}      /// <summary>
/// 记录错误日志方法
/// </summary>
/// <param name="ex"></param>
/// <param name="LogAddress"></param>
public static void WriteError(Exception ex, string LogAddress = "")
{
//如果日志文件为空,则添加至"C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\DevServer\\10.0, YYYY-mm-dd_Log.log文件
if (LogAddress == "")
{
LogAddress = Environment.CurrentDirectory + '\\' +
DateTime.Now.Year + '-' +
DateTime.Now.Month + '-' +
DateTime.Now.Day + "_Log.log";
}
//把异常信息输出到文件
StreamWriter fs = new StreamWriter(LogAddress, true);
fs.WriteLine("当前时间:" + DateTime.Now.ToString());
fs.WriteLine("异常信息:" + ex.Message);
fs.WriteLine("异常对象:" + ex.Source);
fs.WriteLine("调用堆栈:\n" + ex.StackTrace.Trim());
fs.WriteLine("触发方法:" + ex.TargetSite);
fs.WriteLine();
fs.Close();
}

这样大概的方法就完成。 然后对于新手了我"发布“这个概念也有点不清楚然后网上又是一堆质料最后参考这个地址发布

http://blog.sina.com.cn/s/blog_517cae3c0102v0y7.html

最后在按照这个地址里面的教学出现了两个问题

问题1.

最后在网上找到解决方法iis里面的目录浏览启动:

然后没事了 ..继续 又报错了 。!!

"/"应用程序中的服务器错误.
无法识别的属性"targetFramework".请注意属性名称区分大小写.

虽然都是一些简单的错对于刚毕业的我 还是挺头疼的 然后又自己接着网上找.最后解决了

在IIS里面这样操作两步

第一步:

第二步:

最后千辛万苦终于,完成了。》。现在回首其实比之前开始做做的时候想的要简单得多..这只是自己的做法,也只是大概的写了下..当然中途也不止

这几个问题..只是提出个别的

从创建webservice到发布webservice的一些相关总结的更多相关文章

  1. 使用CXF发布WebService

    这里普及一下WebService和cxf的知识.关于webservice和cxf:   WebService.各种提供服务的组件     .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...

  2. Java6 WebService的发布

    Java6 WebService的发布   WebService服务发布往往比较混乱,Axis2的发布形式与XFire发布方式差别很大,而Java6 Web服务的发布与Axis2.XFire的Web服 ...

  3. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  4. CXF发布webService服务以及客户端调用

    这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...

  5. So easy Webservice 7.CXF 发布WebService

    (一)使用ServerFactoryBean 方式实现发布WS服务 1.新建项目,添加cxf jar包到项目中 2.编写服务实现类 /** * CXF WebService * 不用注解 * @aut ...

  6. 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService

    WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷.知名的XFile(新的如CXF).Axis1.Axis2等. 而Sun公司也不甘落后,从早期的JAX-R ...

  7. CXF整合Spring发布WebService实例

    一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...

  8. 使用CXF发布WebService服务简单实例

    一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...

  9. ASP.NET发布WebService

    1. 创建一个空的Web应用程序 2. 再添加一个Web服务 3. 在所创建Web服务内,编写一算法 4. 写完可直接运行查看结果 5. 项目->右键,发布此WebService 6.  发布至 ...

随机推荐

  1. LightOj_1030 Discovering Gold

    题目链接 题意: 在一个1 X N 的格子上, 每个格子都有一定的黄金, 你从第一个格子出发, 问到最后一个格子得到黄金的期望. 每次前进使用骰子投点来决定前进步数, 如果投出的点前进后会超过N, 那 ...

  2. validationEngine[转]

    随笔- 31  文章- 0  评论- 40  validationEngine中文版 — jquery强大的表单验证插件   中文汉化版,官方只有英文的.同时根据中国国情修改了部分验证规则. 这个插件 ...

  3. Java语言基础(一) 标识符

    Java标识符的问题: ①不可以以数字开头 int 123number = 0; //错误 ②可以使用任意的货币符号(¥和$等等)中文也可以  int $i = 0; //正确 int ¥i = 1; ...

  4. SQL*Net more data from client

    SQL*Net more data from client The server is waiting on the client to send more data to its client sh ...

  5. Google Map API 学习四

  6. MIPI总结和MIPI规格说明书

    1. MIPI 因为是差分信号,所以时钟和数据lane 都是一对一对的,对应的即是: 1land = lane(N) + lane(P). 分享mipi 规格说明书文档如下: http://yun.b ...

  7. LOL游戏程序中对一些函数的Hook记录(Win10 x64)

    [PC Hunter Standard][League of Legends.exe-->Ring3 Hook]: 108Hooked Object Hook Address and Locat ...

  8. IOS学习之路十五(UIView 添加背景图片以及加边框)

    怎样给UIview添加背景图片呢很简单,就是先给view添加一个subview,然后设为背景图片: 效果图如下: 很简单直接上代码: //设置内容 self.myTopView.backgroundC ...

  9. C#执行参数为游标 返回一个记录集的Oracle存储过程

    public DataTable SelectPay_Unit() { string returns = ""; DataTable objDataTable = new Data ...

  10. mysql 建立表里某的个字段根据另一字段进行自增长

    在设计一些数据表时,我们经常遇到这样一种情况:需要表中的一个字段根据另一字段进行自增长,比如,在数据表中存储玩家的武器信息时,需要存储玩家的武器对应的bagid,这就是一个根据玩家自己的id(玩家id ...