初学WCF..SL调用WCF问题..大牛们看看
C# code
public interface ICalculator//定义接口
{
[OperationContract]
bool InsertOrUpdateOrDeleteData(string cmdText);
[OperationContract]
ObservableCollection<Student> SelectDate(string cmdText);
}
public class CalculatorService : ICalculator //实现接口
{
public bool InsertOrUpdateOrDeleteData(string cmdText)
{
return DBhelper.GetExcuteNonQuery(cmdText);
}
public ObservableCollection<Student> SelectDate(string cmdText)
{
DataSet ds = new DataSet();
ds=DBhelper.GetData(cmdText);
ObservableCollection<Student> obj = new ObservableCollection<Student>();
DataTable dt = new DataTable();
dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
obj.Add(new Student() { Stu_id = (string)dt.Rows[i][0], Stu_Name = (string)dt.Rows[i][1], Stu_Age = (int)dt.Rows[i][2], Stu_Adress = (string)dt.Rows[i][3], Stu_Sex = (bool)dt.Rows[i][4], Stu_Info = (string)dt.Rows[i][5] });
}
return obj;
}
}
//实现对定义在Services项目中的服务的寄宿
using (ServiceHost Host = new ServiceHost(typeof(CalculatorService)))
{
//终结点
Host.AddServiceEndpoint(typeof(ICalculator), new BasicHttpBinding(), "http://127.0.0.1:8080/CalculatorService");
if (Host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:8080/CalculatorService/metadata");
Host.Description.Behaviors.Add(behavior);
}
Host.Opened += delegate
{
Console.WriteLine("输入off关闭服务");
string str = Console.ReadLine();
if (str == "off")
{
Host.Close();
}
};
Host.Open();
Console.ReadLine();
}
public class DBhelper : IDisposable
{
private static string connctionString = "User=sa;Password=123456;Database=test; Server=.";
private static SqlConnection conn;
private static SqlCommand cmd;
private static SqlDataAdapter dr;
/// <summary>
/// 得到连接对象
/// </summary>
public static SqlConnection Connection
{
get
{
conn = new SqlConnection(connctionString);
conn.Open();
return conn;
}
}
/// <summary>
/// 关闭连接时,释放资源
/// </summary>
public void Dispose()
{
conn.Dispose();
cmd.Dispose();
}
/// <summary>
/// 关闭操作数据库的对象
/// </summary>
public void Closed()
{
cmd.Cancel();
if (conn.State == ConnectionState.Closed)
{
conn.Close();
}
}
/// <summary>
/// 创建参数
/// </summary>
/// <param name="ParaName"></param>
/// <param name="type"></param>
/// <param name="value"></param>
/// <returns></returns>
public static SqlParameter CreateParameter(string ParaName, SqlDbType type, object value)
{
SqlParameter Para = new SqlParameter(ParaName, type);
Para.Value=value ;
return Para ;
}
/// <summary>
/// 增删改
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static bool GetExcuteNonQuery(string cmdText)
{
using (cmd = new SqlCommand(cmdText,Connection))
{
if (cmd.ExecuteNonQuery() > 0)
{
return true;
}else
{
return false ;
}
}
}
/// <summary>
/// 查询返回数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static DataSet GetData(string cmdText)
{
DataSet ds = new DataSet();
using (dr = new SqlDataAdapter(cmdText,Connection))
{
dr.Fill(ds);
return ds;
}
}
//在SL类库项目中调用
CalculatorServiceClient calient = new CalculatorServiceClient("http://127.0.0.1:8080/CalculatorService");
calient.SelectDateCompleted += new EventHandler<SelectDateCompletedEventArgs>(calient_SelectDateCompleted);
CalculatorServiceClient("http://127.0.0.1:8080/CalculatorService"); //实例化时报错,关键字不在字典中
//在控制台程序中调用
class Program
{
static void Main(string[] args)
{
CalculatorServiceClient cl = new CalculatorServiceClient();
Student[] obj= cl.SelectDate("select * from students");
foreach (var item in obj)
{
Console.WriteLine(((Student)item).Stu_Name);
}
Console.ReadLine();
}
}
//可以正常输出
//网上的资料都说 要创建SL wcf工程...大牛们..在SL中怎么调用这个WCF服务呢
//引用WCF生成的CONFIG,我看是对的啊...
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_CalculatorService" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1:8080/CalculatorService" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_CalculatorService"
contract="ServiceReference1.CalculatorService" name="BasicHttpBinding_CalculatorService" />
</client>
</system.serviceModel>
</configuration>