WCF 服务类

L_Y_H_1_2_3_4 2014-05-09 10:28:00

//服务名称:ServiceReference1
//服务端:Service1.svc里面的代码如下
string connectionString = "Data Source=WIN-80OAKU6S6L2;Initial Catalog=lyhjxc;User ID=sa;PassWord=123456;";


/// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>影响的记录数</returns>
public int ExecuteSql1(string SQLString, params SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
cmd.Parameters.AddRange(cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
}
}
}

/// <summary>
///
/// </summary>
/// <param name="cmd"></param>
/// <param name="conn">SQL连接</param>
/// <param name="trans">事物</param>
/// <param name="cmdText">SQL语句</param>
/// <param name="cmdParms">参数</param>
private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
{
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
Hashtable SQLStringList = new Hashtable();
}
catch (System.Data.SqlClient.SqlException ex)
{
throw ex;
}
}


//IService1.cs

[OperationContract]
int ExecuteSql1(string SQLString, params SqlParameter[] cmdParms);


//客户端调用ExecuteSql1方法:
ServiceReference1.Service1Client FF= new ServiceReference1.Service1Client();

FF.ExecuteSql1(“select * from user where ID=@ID”,cmdParms)

执行后报如下错误:

尝试对参数 http://tempuri.org/ 进行序列化时出错: cmdParms。InnerException 消息是“不应为数据协定名称为“string:http://www.w3.org/2001/XMLSchema”的类型“System.Data.SqlTypes.SqlString”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。”。有关详细信息,请参见 InnerException。


这个问题要怎么处理??
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
L_Y_H_1_2_3_4 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html
在吗?你提供的那个方法 我在客户端调用的服务端时候提示的类型中没有: IList<SerSqlParameter> cmdParms类型是怎么回事??
L_Y_H_1_2_3_4 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html
这个好像可以我去试试不懂再问你
zhao38322684 2014-05-09
  • 打赏
  • 举报
回复
SqlParameter 可以序列化吗。。
本书是WCF的权威指南。WCF是Microsoft推出的在Windows操作系统下开发面向服务应用程序的统一平台,是革命性的技术平台。作为微软授予的“软件英杰”,本书作者Juval Lwy曾经参与了WCF的战略性设计,并与WCF的开发团队一同合作,因此本书具有很高的实用价值,它对WCF进行了深入的技术剖析,而非死板的文档化描述。本书关注隐藏在特殊设计决策之后的根本原理,这些原理包括SOA开发中极度匮乏的文档,以及难以理解的特性等。通过本书,开发者与架构师不仅能够了解如何进行WCF程序设计,还能够掌握相关的设计准则、最佳实践以及WCF存在的缺陷。   本书包括50多个工具和辅助,以及70多个设计图,它们都设计用来提高我们的生产力,保障WCF服务的质量,同时能弥补WCF自身存在的一些缺陷,并帮助简化和自动化特定任务。   除了介绍面向服务的基础知识外,本书涵盖了以下内容:   •服务契约分解。   •事务与错误处理。   •数据契约版本控制与封送。   •并发管理。   •可伸缩性策略。   •队列服务。   •操作、调用与事件。   •面向服务安全性。   •本书从软件工程的角度出发,深入探索了WCF的每个主题。本书能够使您如虎添翼,从而设计出可维护的、可扩展的、可重用的SOA应用程序。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧