从创建webservice到发布webservice的一些相关总结
最近做了一个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的一些相关总结的更多相关文章
- 使用CXF发布WebService
这里普及一下WebService和cxf的知识.关于webservice和cxf: WebService.各种提供服务的组件 .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...
- Java6 WebService的发布
Java6 WebService的发布 WebService服务发布往往比较混乱,Axis2的发布形式与XFire发布方式差别很大,而Java6 Web服务的发布与Axis2.XFire的Web服 ...
- 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 ...
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- So easy Webservice 7.CXF 发布WebService
(一)使用ServerFactoryBean 方式实现发布WS服务 1.新建项目,添加cxf jar包到项目中 2.编写服务实现类 /** * CXF WebService * 不用注解 * @aut ...
- 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷.知名的XFile(新的如CXF).Axis1.Axis2等. 而Sun公司也不甘落后,从早期的JAX-R ...
- CXF整合Spring发布WebService实例
一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...
- 使用CXF发布WebService服务简单实例
一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...
- ASP.NET发布WebService
1. 创建一个空的Web应用程序 2. 再添加一个Web服务 3. 在所创建Web服务内,编写一算法 4. 写完可直接运行查看结果 5. 项目->右键,发布此WebService 6. 发布至 ...
随机推荐
- Hibernate中的一对多关系详解(2)
一对多的关系:例如,部门对员工,一个部门可以有多个员工 多对一的关系:例如,员工对部门,多个员工属于一个部门,并且每个员工只能属于一个部门 那么一对多.多对一在数据库中的是怎样表示的呢?好多话都不说了 ...
- Web 研发模式演变
前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的优劣. 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 ...
- 为ant指定编译版本
用Eclipse的ant折腾了一天也没搞清楚为什么同样的设置ant出的class版本却不一样.后来下载个ant工具在命令行执行通过. 从网上抄得指定编译版本的方法如下: ant 运行时,必需依赖jdk ...
- Delphi版的完成端口控件
http://download.csdn.net/user/mike1234567890/uploads/2
- web版本控制
说说你在web开发中是怎么进行版本管理的 在web开发中,我首先将系统框架搭建完成后,我会发布到服务器上,然后给小组成员进行分工,为他们划分各自的模块,他们每天早上上班时就从服务器上先将自己机器上面的 ...
- java学习面向对象之异常之二
我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉. 捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式.具体格式是: try { //需要被检测的异常 } catch(异常类 变量) ...
- screen space directional occlusion(SSDO) in Unity5
也许是哪里出了问题..效果一般 16采样点 Gird . Random 博主近期渲染:最近用unity5弄的一些渲染 ---- by wolf96 http://blog.csdn.net/wolf ...
- HDOJ1021题 Fibonacci Again 应用求模公式
Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...
- senrty 配置Email
测试页面在这里 右上角头像->管理->邮件 配置如下:(注意一点:465是SSL的 587是TLS的) 其他django email 1.3 文献在这里 现在都1.8了貌似 如 ...
- C++获取本机IP地址
对网络库简单的封装了一下,以后自己使用的时候方便了很多 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接 ...