您的位置:首页 > 其它

Silverlight+WCF 新手实例 象棋 WCF通讯基础(十四)

2010-07-12 15:59 309 查看
从此节开始,我们要开始WCF通讯了。

本游戏的只是基于WCF最基础的应用,没有WCF深奥的知识,相关的深奥知识请关注专业的WCF系列文章。

我们先来实现一个Silverlight里调用Hellow的尝试:

我们新建一个新的Silverlight应用程序:文件->新建->项目->Silverlight应用程序->Hellow

建立后就一个Hellow应用程序和一个Helow.web的Web应用程序。

一:我们将WCF集成在Web应用程序中

我们对着Web应用程序右键-》添加->新建项->WCF服务-》起名:Service.svc

回车后,默认生成IService.cs接口和Service.svc/Service.svc.cs文件

我们看一下自动生成的代码:

[ServiceContract]
public interface IService
{
[OperationContract]
void DoWork();

[OperationContract]
string SayHello(string name);//这个是我加的
}

看下代码分析:

接口标识:[ServiceContract],

接口头顶上多了一个特性,翻译一下就叫“服务契约”,当初刚看WCF的webcast时,一听契约,迷糊了,这名字也扩鬼义了。

方法名标识:[OperationContract]

其实就是一些特性,用于微软内部反射的一个标识,看见不同名称干点不同的事。

当然了,除了接口,方法,还有实体类,和成员标识:

实体类契约:[DataContract]--有点神奇的是,我刚发现我的实体类里有一个忘了写这个,竟然也一直成功的运行到现在。

属性:[DataMember]

private void btnCallWCF_Click(object sender, RoutedEventArgs e)
{
Binding binding = new BasicHttpBinding();
EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/Service.svc");
HellowService.ServiceClient client = new HellowService.ServiceClient(binding, endPoint);
client.SayHelloCompleted += new EventHandler<HellowService.SayHelloCompletedEventArgs>(client_SayHelloCompleted);
client.SayHelloAsync(txtName.Text);
}

void client_SayHelloCompleted(object sender, HellowService.SayHelloCompletedEventArgs e)
{
tbMsg.Text = e.Result;
}

这里说一下:

第一行:Binding binding =new BasicHttpBinding(); --》绑定通讯方式,这里是BasicHttp方式,基础的http请求方式。像这一类的方式有N种,10种左右。说明微软的支持是相当的强大的。

第二行:EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/Service.svc");--》指定SVC的路径,要不然找不到路径调用了。这里我们用了固定端口12345。

如果要固定端口,这里需要配置一下Hellow.Web项目的属性:



然后打开ServiceReferences.ClientConfig,把特定端口号也改成12345。

第三行:调用方法完成后的回调事件

第四行,异步调用SayHello方法。

说明:所有WCF的方法调用都是异步的,所以总是伴有回调函数。

对于WCF,用的最多的就是事件和委托了,这两点不熟悉的大伙子们,要赶紧补补课啦。

一切就绪,F5运行,出来如下窗口:



输入名称:路过秋天,点击调用,正常回来消息了。



说明,第一步的WCF调用已经成功了。

大伙在试的时候要悠着点,不然很容易就出现各种各样的问题

下节我们讲将WCF独立出来一个项目,不放在Hellow.Web上,由于独立出来,所以会用另一个端口,

对于端口不同产生的跨域问题,也顺手解决。

这里提供源下载:点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: