您的位置:首页 > 其它

从创建webservice到发布webservice的一些相关总结

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

1.首先创建web



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



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

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

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

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


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

先创建一个相关类

publicpartialclassAddTea
{
publicAddTea()
{
this.TeaID="";
this.Name="";
}
publicAddTea(string_teaid,string_name)
{
this.TeaID=_teaid;
this.NAME=_name;
}
///<summary>
///编码
///</summary>
publicstringTeaID{get;set;}
///<summary>
///名称
///</summary>
publicstringNAME{get;set;}
}


方法:

#region添加方法--方法上面必须加上[WebMethod]
///<summary>
///添加方法
///</summary>
///<paramname="data">调用时传进来的参数(json字符串)</param>
[WebMethod]
publicstringAddtea(stringdata)
{
stringjson="";
//序列化传进来的字符串(序列化的时候AddTea是自己根据业务创建的一个实体类然后进行序列化)
AddTeaadd=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
AddteaDALaddteaDAL=newAddteaDAL();
///<summary>
///添加
///</summary>
///<paramname="_addtea">添加类</param>
///<paramname="con">字符串连接</param>
///<returns></returns>
publicstringAddTea(Addtea_addtea,string_con)
{
returnthis.addteaDAL.AddTea(_addtea,_con);
}
//DAL
///<summary>
///添加
///</summary>
///<paramname="_data"></param>
///<paramname="_con"></param>
publicstringAddTea(AddTea_data,string_con)
{
stringsql="insertintoAddTea(ID,PRICE)VALUES(:ID,:PRICE)";
OdbcParameter[]parmbm=newOdbcParameter[]{
newOdbcParameter("ID",data.ID),
newOdbcParameter("PRICE",data.PRICE)
};
Helper.ExecuteNonQuery(sqlbm,con,parmbm);

//调用存储过程需要的参数
OdbcParameter[]odbcparm=newOdbcParameter[]{newOdbcParameter(),newOdbcParameter()};
odbcparm[0].OdbcType=OdbcType.NVarChar;
odbcparm[0].ParameterName=":TeaID";
odbcparm[0].Value=data.TeaID;

odbcparm[1].OdbcType=OdbcType.NVarChar;
odbcparm[1].ParameterName=":NAME";
odbcparm[1].Value=data.NAME;

//调用存储过程(?号代表参数,一个问号代表一个参数)
    //returnvalue接受存储过程返回的错误信息
objectreturnvalue=Helper.ExecuteNonQuery("存储过程名?,?",con,CommandType.StoredProcedure,odbcparm)
}
  上面执行存储过程的方法是重载的一个添加方法只是多了一个(CommandType参数)
 

}



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

    ///<summary>
///执行存储过程
///</summary>
///<paramname="sql"></param>
///<paramname="con"></param>
///<paramname="_commandType"></param>
///<paramname="spms"></param>
///<returns></returns>
publicstaticobjectExecuteNonQuery(stringsql,stringcon,CommandType_commandType,paramsOdbcParameter[]spms)
{
OdbcCommandcommand=PrepareCommand(sql,con,spms);
command.CommandText=sql;
command.CommandType=CommandType.StoredProcedure;
//command.Parameters.Add("SQLCODE","").Direction=ParameterDirection.ReturnValue;
objectresult="";
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(Exceptione)
{
result=e.Message;//接受错误信息返回去
WriteError(e,"");//记录错误日志

}
finally
{
if(command.Connection.State!=ConnectionState.Closed)
command.Connection.Close();
}

returnresult;
}

    ///<summary>
///记录错误日志方法
///</summary>
///<paramname="ex"></param>
///<paramname="LogAddress"></param>
publicstaticvoidWriteError(Exceptionex,stringLogAddress="")
{
//如果日志文件为空,则添加至"C:\\ProgramFiles(x86)\\CommonFiles\\MicrosoftShared\\DevServer\\10.0,YYYY-mm-dd_Log.log文件
if(LogAddress=="")
{
LogAddress=Environment.CurrentDirectory+'\\'+
DateTime.Now.Year+'-'+
DateTime.Now.Month+'-'+
DateTime.Now.Day+"_Log.log";
}
//把异常信息输出到文件
StreamWriterfs=newStreamWriter(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里面这样操作两步

第一步:



第二步:



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

这几个问题..只是提出个别的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: