我的使用环境:
1. 我IDE是vs2010 beta2.
2. 我的WCF service 是通过c# website WCF service建立起来的,这样可以省掉很多事。
3. 建立一个client端,就是模拟用户用service的,我用的是window forms application,给win form 加3个label控件,1个textbox控件和一个button控件。给button加上button1_Click事件。
4. 设置你的win form项目为起始项目。
好,一切就绪。开始测试使用。
1. 首先把默认的(模板提供的)数据结构用上:
(1) 单独编译web wcf service .
(2) 你的win form加service reference,(project name点右键,add service reference)
(3) 在弹出的add service reference窗口里点击discover ,vs会找可用的service,找到后会再Services 窗口里列出来,选择你要的加载的service,然后click ok.
(4) 在你的solution explorer里,可以发现service references节点下有你的service.现在你就可以用来自你的web service的服务了.
(5) 给你的win from里的button1_Click事件添加代码如下代码:
ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
string ss;
ss = client.GetData(this.textBox1.Text);
this.label1.Text = ss;
ServiceReference1.CompositeType ct = new ServiceReference1.CompositeType();
ct.StringValue = "^_^";
ct.BoolValue = true;
ct= client.GetDataUsingDataContract(ct);
this.label2.Text = ct.StringValue;
(6) 运行程序,在textbox里输入值,点按钮。Label1和label2的值就变化,显示的是服务返回的结果。
2. 新增数据结构的使用
(1) 在Iservice.cs里添加新的数据结构:
[DataContract]
public class testlog
{
string data;
[DataMember]
public string Data
{
get
{
return this.data;
}
set
{
data = value;
}
}
BTW:要避免使用带参构造函数,因为WCF只能使用默认构造函数
(2) 在Iservice.cs新增方法:(在IService接口里)
[OperationContract]
testlog gettestlog(testlog testlog);
(3) 在Service.cs里增加对新增数据结构的使用:(给Service类增加方法)
public testlog gettestlog(testlog testlog)
{
testlog.Data="/nMethod is running!/n";
return testlog;
}
(4) 重新编译你的service,然后在把1.2-1.4做一次,如果不重新绑定,win form使用的就还是老的,他没有自动更新功能。
(5) 给你的 button1_Click事件增加方法:
ServiceReference1.testlog t=new ServiceReference1.testlog();
this.label3.Text = client.gettestlog(t).Data;
(6) 运行程序,在textbox里输入值,点击button,就可以看到结果了。