最近做了一个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. 如何解决 Java 安全问题?

    如何解决 Java 安全问题,目前的应对策略都十分笨拙,往往适得其反.幸运的是,有一种新的方法可以将安全机制嵌入 Java 执行平台--或者更具体地说,嵌入 Java 虚拟机中,进而规避一些「Big ...

  2. highestAvailable比较灵活,毕竟大多数功能不需要系统最高权限(四种方法:屏蔽UAC,右键以管理员身份运行,增加manisfest,制作数字证书)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  3. Git入门简介

    ​1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本 ...

  4. android通用文件操作

    最经用到android的SCCard的文件操作,因此稍作了整理,将它写成一个简单的工具类.其中,可以判断SDCard的是否可用,可用存储空间,文件的创建以及写入数据.经过测试,可以正常使用.代码如下: ...

  5. wcf客户端捕获异常

    直接使用Exception进行捕获,然后在监视器中查看具体是哪一个异常 System.Exception {System.ServiceModel.Security.MessageSecurityEx ...

  6. 使用bacula实现Linux的远程备份和还原

    Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作.Bacula,既有windows版本的,也有Linux,U ...

  7. [LeetCode#204]Factorial Trailing Zeroes

    Problem: Description: Count the number of prime numbers less than a non-negative number, n. Analysis ...

  8. bzoj2326

    首先不难得出递推式f[i]=(f[i-1]*10^k+i) mod m;f[i]表示接到第i个数时的余数,k表示i的位数不难想到先按位数穷举位数,然后对于确定的位数,构造矩阵解决易得出:f[i]   ...

  9. 【转】Java中如何遍历Map对象的4种方法

    原文网址:http://blog.csdn.net/tjcyjd/article/details/11111401 在Java中如何遍历Map对象 How to Iterate Over a Map ...

  10. 使用VisualStudio进行单元测试之三

    私有方法需不需要测试,本文不做讨论.假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试. 准备测试代码 测试用的代码还是前面测试时使用过的代码,不同之处就是在类中增加了一 ...