WCF简单示例

工程结构:

注意三个项目都需要引用System.ServiceModel以及System.Runtime.Serialization。

CommonLib工程:

1     [ServiceContract]//, ServiceKnownType(typeof(User))]
2     public interface  IMyObject
3     {
4         [OperationContract]
5         int Add(int x, int y);
6         [OperationContract]//, ServiceKnownType(typeof(User))]
7         User GetInstance();
8     }

IMyObject

WCF接口需要添加ServiceContract特性,方法需要添加OperationContract。

User类是需要传输的数据类型

 1     [DataContract]
 2     public class User
 3     {
 4         private string _name;
 5         private int _age;
 6         public User(string name, int age)
 7         {
 8             _name = name;
 9             _age = age;
10         }
11         [DataMember]
12         public string Name
13         {
14             get { return _name; }
15             set { _name = value; }
16         }
17         [DataMember]
18         public int Age
19         {
20             get { return _age; }
21             set { _age = value; }
22         }
23     }

User.cs

类特性添加DataContract,需要暴露的属性添加特性:DataMember,注意属性需要实现Get,Set方法,缺一不可。

Server工程:

 1     [ServiceBehaviorAttribute(IncludeExceptionDetailInFaults = true)]
 2     class MyObject:IMyObject
 3     {
 4         User _student;
 5         public int Add(int x, int y)
 6         {
 7             return x + y;
 8         }
 9
10         public User GetInstance()
11         {
12             if (_student == null)
13                 _student = new User("Jashon Han", 26);
14             return _student;
15         }
16     }

MyObject.cs

IMyObject接口的实现。

 1   class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             try
 6             {
 7                 Console.WriteLine("Start my service!");
 8                 Uri baseAddress = new Uri("net.tcp://localhost:8011/MyService");
 9                 ServiceHost host = new ServiceHost(typeof(MyObject), baseAddress);
10
11                 ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
12
13                 host.Description.Behaviors.Add(smb);
14
15                 host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
16                 host.AddServiceEndpoint(typeof(IMyObject), new NetTcpBinding() { MaxReceivedMessageSize = 2147483647, ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas() { MaxArrayLength = 2147483647 } }, baseAddress);
17
18                 host.Open();
19                 Console.WriteLine("The service is ready.");
20                 Console.WriteLine("Press <ENTER> to terminate service.");
21                 Console.WriteLine();
22             }
23             catch (Exception ex)
24             { Console.WriteLine(ex); }
25
26             Console.ReadLine();
27
28         }
29     }

Program.cs

MaxReceivedMessageSize属性和MaxArrayLength是设定传输数据大小,如果没有特别需求,默认就好。

Client 工程:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             System.ServiceModel.NetTcpBinding binding = new System.ServiceModel.NetTcpBinding() { MaxReceivedMessageSize = 2147483647 };
 6             binding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas() { MaxArrayLength = 2147483647 };
 7             System.ServiceModel.ChannelFactory<IMyObject> factory = new System.ServiceModel.ChannelFactory<IMyObject>(binding, new System.ServiceModel.EndpointAddress("net.tcp://localhost:8011/MyService"));
 8             IMyObject test = factory.CreateChannel();
 9             var result = test.Add(12, 13);
10             var student = test.GetInstance();
11             Console.WriteLine("Student Name:{0},Age{1}", student.Name, student.Age);
12             Console.WriteLine(result);
13             Console.ReadKey();
14
15         }
16     }

Program.cs

以上服务的绑定等操作都是通过代码实现,也可以通过配置文件实现。

时间: 2024-09-29 18:08:01

WCF简单示例的相关文章

WCF 简单示例

WCF(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK).WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务.理论上讲,创建服务并不一定需要WCF,但实际上,使用WCF却可以使得创建服务的任务事半功倍.WCF是微软对一系列产业标准定义的实现,包括服务交互.类型转换.封送

C# WCF简单入门图文教程(VS2010版)

C# WCF简单入门图文教程(VS2010版) 作者:丶一二丶 字体:[增加 减小] 类型:转载 时间:2016-03-17我要评论 这篇文章主要介绍了WCF简单入门图文教程,版本是VS2010版,帮助大家轻松学习了解DataContract.ServiceContract等特性,感兴趣的小伙伴们可以参考一下 在这个例子中我们将使用VS2010创建一个WCF服务,其中会了解[DataContract][ServiceContract]等特性. 内置的WCFSVCHost,并使用“WCF测试客户端

C# 一个WCF简单实例

C# 一个WCF简单实例 作者: 字体:[增加 减小] 类型:转载 时间:2012-10-27我要评论 以订票为例简单应用wcf程序,需要的朋友可以参考下 WCF实例(带步骤) 复制代码代码如下: <xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IServi

C# 编写WCF简单的服务端与客户端

http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术.是Windows平台上开发分布式应用最佳的实践方式. 今天带如何一步一步实现WCF服务端与客户端的开发及基础讲解. 一.在Visual

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

【转】bind简单示例

bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename T, typename Arg> class simple_bind_t { private: typedef R (T::*F)(Arg); F f_; T* t_; Arg& a_; public: simple_bind_t(F f, T* t, Arg &a) : f_(f),