最近做了一个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. 写个自动下载安装Ant的shell脚本【一】

    #!/bin/bash ###################################################### # file name: install_ant.sh # # f ...

  2. socket、tcp、http

    第一部分.概念的理解 1.什么是Socket? Socket又称之为“套接字”,是系统提供的用于网络通信的方法.它的实质并不是一种协议,没有规定计算机应当怎么样传递消息,只是给程序员提供了一个发送消息 ...

  3. Codeforces Round #205 (Div. 2) : D

    思维题,感叹自己的智商不够啊. 思路大概是这样的: 1.排在队伍前面的女生是不用换位置的: 2.女生在队伍中的顺序是不会变的: 3.最后一个女生稳定了则程序结束: 4.每个女生都有个初始位置和最终位置 ...

  4. 我是如何学习NodeJs

    实际上在开始的时候我已经对NodeJS有了一定的了解. 比如我知道它是居于Javascript语言的服务器端web Server,比如我知道它的优势在于它的性能,而造成性能优异的原因在于高效的V8引擎 ...

  5. VSFTP被动模式

    搞了几个弯路,各种办法都试了. 动静最小的,还是定义端口. 还有虚拟用户,配置太多,只适用于小范围吧.又要pam.d,又要chroot之类的,nologin也必不可少. ~~~~~~~~~ 限制被动模 ...

  6. Apache HBase RPC身份验证中间人安全措施绕过漏洞(CVE-2013-2193)

    漏洞版本: Apache Group HBase 0.94.x Apache Group HBase 0.92.x 漏洞描述: BUGTRAQ ID: 61981 CVE(CAN) ID: CVE-2 ...

  7. BZOJ1599: [Usaco2008 Oct]笨重的石子

    1599: [Usaco2008 Oct]笨重的石子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 758  Solved: 513[Submit][ ...

  8. MySQL安装没有弹出配置向导

    安装MySQL过程中一切都正常只是没有弹出MySQL配置向导对话框,即出现"launch the MySQL Instance Configuration Wizard" fini ...

  9. Linux学习笔记9——make和Makefile

    一,Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”.“makefile”.“Makefile”的文件,大部分情况下,make命令都支持m ...

  10. BlogEngine.Net

    BlogEngine.Net架构与源代码分析系列part1:开篇介绍 2008-11-05 15:27 by GUO Xingwang, ...阅读, ...评论, 收藏, 编辑 最近我要开始这个系列 ...