Technological achievements dream
技术成就梦想
posts - 17, comments - 87, trackbacks - 2, articles - 0
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
WCF学习(二)-------服务契约
Posted on 2008-06-30 10:14
Henllyee Cui
阅读(1556)
评论(4)
编辑
收藏
所属分类:
WCF学习笔记
一、服务契约介绍
我个人理解服务契约是一组公开的操作,其中公开的操作(OperationContract)只能定义在方法(Method)上。对于我们要公开的服务我们可以在接口或者类上加上标识ServiceContract。但是我们一般情况下,会把ServiceContract定义在接口上而不是类上,这样有几个好处:
1.方便契约的继承,不同的类型可以去实现相同的契约,重用性高。
2.同一服务可以去实现多个契约。
3.可以随时去修改服务类型,而不需去修改接口。
下面定义一个服务的契约:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
namespace
Service
{
[ServiceContract(Name
=
"
Service_Calucator
"
,Namespace
=
"
Henllyee
"
)]
public
interface
ICalucator
{
[OperationContract]
int
Add(
int
x,
int
y);
}
}
我们在上面首先定义了一个接口名称为:ICalucator,然后我们要将这个接口公开为服务契约在上面加上属性标识[ServiceContract],其中Name可以为契约指定别名,这样的话,如果我们在客户端遇到相同的接口时可以通过Name来制定别名区别开来。公开的操作为Add方法,在上面标识[OperationContract]即可。
二、方法的重载
按照我们正常的方法去重载的话,只需要方法的参数不同(个数、类型)就可以实现方法的重载。但是我们在服务契约的定义的时候是不能怎样的,wdsl是编译同不过的如:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
namespace
Service
{
[ServiceContract(Name
=
"
Service_Calucator
"
,Namespace
=
"
Henllyee
"
)]
public
interface
ICalucator
{
[OperationContract]
int
Add(
int
x,
int
y);
[OperationContract]
double
Add(
double
x,
double
y);
}
}
上面的方法是编译不能通过的。但是我们有一种解决的办法可以去解决这样的问题,就是通过OperationContract的Name属性来设定方法的别名是实现方法的重载。如:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
namespace
Service
{
[ServiceContract(Name
=
"
Service_Calucator
"
,Namespace
=
"
Henllyee
"
)]
public
interface
ICalucator
{
[OperationContract(Name
=
"
IntAdd
"
)]
int
Add(
int
x,
int
y);
[OperationContract(Name
=
"
DoubleAdd
"
)]
double
Add(
double
x,
double
y);
}
}
下面我们通过数据元的方式来配置一个宿主主机,我们添加一个控制台的程序,通过配置App.Config来实现。
在App.Config中:
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
configuration
>
<
system.serviceModel
>
<
services
>
<
service name
=
"
Service.Calucator
"
behaviorConfiguration
=
"
mex
"
>
<
host
>
<
baseAddresses
>
<
add baseAddress
=
"
http://localhost:8888
"
/>
</
baseAddresses
>
</
host
>
<
endpoint address
=
"
Calucator
"
binding
=
"
basicHttpBinding
"
contract
=
"
Service.ICalucator
"
></
endpoint
>
</
service
>
</
services
>
<
behaviors
>
<
serviceBehaviors
>
<
behavior name
=
"
mex
"
>
<
serviceMetadata httpGetEnabled
=
"
true
"
/>
</
behavior
>
</
serviceBehaviors
>
</
behaviors
>
</
system.serviceModel
>
</
configuration
>
在主程序中:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
using
Service;
namespace
Host
{
class
Program
{
static
void
Main(
string
[] args)
{
ServiceHost host
=
null
;
try
{
host
=
new
ServiceHost(
typeof
(Calucator));
host.Open();
Console.Write(
"
Host is opening now! Press any key to stop
"
);
Console.Read();
}
finally
{
host.Close();
}
}
}
}
然后我们启动主机,在浏览器中输入地址:
http://localhost:8888/?wsdl
。我们可以看到:
我们可以看到wsdl编译时已经将名称编译成为了我们Name中定义的别名。
Tag标签:
WCF技术
Feedback
#1楼
回复
引用
查看
2008-06-30 11:40 by
jillzhang
WCF技术研究团队诚邀您的加入
http://www.cnblogs.com/jillzhang/archive/2008/04/17/1158166.html
#2楼
[
楼主
]
回复
引用
查看
2008-06-30 12:08 by
Henllyee Cui
好的。我就来了!
#3楼
回复
引用
查看
2008-06-30 12:25 by
TerryLee
对于我们要公开的服务我们可以在接口或者方法上加上标识ServiceContract。
___________________________________________
这句话有笔误...
#4楼
[
楼主
]
回复
引用
查看
2008-06-30 12:28 by
Henllyee Cui
@TerryLee
对,不好意识啊,改下。
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-06-30 12:30 编辑过
相关文章:
对一些面试题的回答
把Membership,Role包装为WCF服务
Host多个WCF服务(Self-host)
相关链接:
所属分类的其他文章:
WCF学习(五)数据契约之已知类型
WCF学习 (四) 数据契约的事件
WCF学习(三)-------数据契约1
WCF学习(二)-------服务契约
wcf学习(一):预览
最新IT新闻:
Facebook推出新版登录页
阿里巴巴将重新进军韩国 01年曾因发展不力撤出
美股暴跌 中国概念股周一全线大跌
美股暴跌重挫科技股:谁将挺过寒冬
百度多元化背后面临的困惑
Powered by:
博客园
Copyright © Henllyee Cui
日历
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
公告
本博客所有资源无说明外都为原创,转载请说明出处。
This blog without all the resources that are outside the original, reproduced Please indicate the source.
城市:苏州 昆山
msn:Henllyee@hotmail.com
网名:小猪
与我互动
给我发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看私人留言
我参加的小组
jQuery
web标准设计
LINQ
ASP.NET AJAX
.NET 3.x
我参与的团队
苏州.Net俱乐部(0/722)
Silverlight学习与研究(0/285)
WCF技术研究团队(0/174)
WF技术研究团队(0/21)
我的标签
WCF技术(5)
asp.net 控件开发(4)
Asp.net Ajax(2)
IT人生(1)
设计模式(1)
随笔分类
Asp.net Ajax(2)
Asp.net 控件开发(4)
asp.net技术(1)
javascript、css 浏览器兼容问题(1)
sql Server
WCF学习笔记(5)
个人感悟(3)
设计模式(1)
随笔档案
2008年8月 (3)
2008年7月 (5)
2008年6月 (2)
2008年5月 (4)
2008年4月 (2)
2008年3月 (1)
相册
My Picture
最新随笔
1. WCF学习(五)数据契约之已知类型
2. WCF学习 (四) 数据契约的事件
3. 个人的一点私事
4. Asp.net 控件开发(四) 数据回传
5. Asp.net Ajax WebService 实现循环引用(自定义JavascriptConverter)
6. WCF学习(三)-------数据契约1
7. 简单工厂
8. C# 反射机制(转)
9. WCF学习(二)-------服务契约
10. wcf学习(一):预览
最新评论
1. re: WCF学习 (四) 数据契约的事件
@jillzhang
好的,我现在只想做基础的东西,现在确实写不出什么高深的东西出来
--Henllyee Cui
2. re: WCF学习(五)数据契约之已知类型
@jillzhang
谢谢老大支持阿。
--Henllyee Cui
3. re: WCF学习 (四) 数据契约的事件
可以发到团队中去,文章不管深浅,同样欢迎。只要有学wcf的气氛足以
--jillzhang
4. re: WCF学习(五)数据契约之已知类型
写的不错,支持一下
--jillzhang
5. re: 个人的一点私事
@wayne D.S.
唉...就是有点无聊啊。想去你那边玩。
--Henllyee Cui
阅读排行榜
1. wcf学习(一):预览(2064)
2. WCF学习(二)-------服务契约(1556)
3. asp.net 控件开发(三)------处理标签间内容(1490)
4. asp.net 控件开发(一)---显示控件内容(1410)
5. asp.net控件开发(二)--------简单属性(1384)
评论排行榜
1. wcf学习(一):预览(12)
2. 女人嫁IT的十大理由(11)
3. asp.net控件开发(二)--------简单属性(11)
4. WCF学习(三)-------数据契约1(11)
5. Asp.net 控件开发(四) 数据回传(9)