示例很简单,client端,server端,中间信道走的是SOAP协议。
SOAP
client:一个请求消息
server:一个响应消息
XML一个信封
服务端实现:
1.具体动作的方法,可单独一个类库
2.定义服务合同接口
3.实现服务接口
[ServiceContract]
public interface IRoomService {
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: 在此添加您的服务操作
[OperationContract]
int GetInt(int value);
}
public class RoomService : IRoomService {
public string GetData(int value) {
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite) {
if (composite == null) {
throw new ArgumentNullException("composite");
}
if (composite.BoolValue) {
composite.StringValue += "Suffix";
}
return composite;
}
public int GetInt(int v){
return v;
}
}
服务端可以在winform或者控制台程序中被启动,确实可以哟
class Program {
internal static ServiceHost myService = null;
private static ServiceHost Start(){
if (myService == null) {
myService = new ServiceHost(typeof(WcfServiceLibraryOne.RoomService));
}
return myService;
}
private static void Stop(){
if (myService.State != CommunicationState.Closed) {
myService.Close();
}
}
static void Main(string[] args) {
Start();
Console.WriteLine("wcf is start to running, press enter to exit!!!");
Console.ReadLine();
Stop();
}
}
然后可以把WCF测试客户端打开查看,http://blog.sina.com.cn/s/blog_55a69f170100qjid.html
----------------------------------------------------------------------------------------------------------------------------------------------
到这里server端已经建好,下面是客户端来调用服务端
---------------------------------------------------------------------------------------------------------------------------------------------
可以新建一个控制台项目,服务引用刚才的server端地址,就会把相应需要应用的dll都引用进来。
static void Main(string[] args) {
RoomServiceClient client = new RoomServiceClient();
int ret = client.GetInt(1000);
Console.WriteLine("get return value from wcf server side : {0}",ret);
Console.ReadLine();
}
给客户程序创建代理有三种方式:
1.VS添加服务引用,需要访问WSDL文档
2.serviceModel元数据实用工具svcutil.exe
3.ChannelFactory类
end.