解决方案概览:
Client:windows 控制台应用程序。
WcfService1: windows 服务应用程序。
WCFWebTest:asp.net 空web应用程序。
变量程序命名、结构可能不是那么规范,重点在与说明问题。
- 建立WCF服务项目。
在解决方案上面点右键->添加->新建项目->wcf服务应用程序(图标是齿轮带3个小箭头)。
删掉自动生成的服务和协议。
- 添加服务。
在wcf服务项目上点右键,点添加->新建项->wcf服务。本例中建立了两个服务,User.svc 和Animal.scv。建立服务后,会自动生成对应的协议(接口),IUser、IAnimal.
- 测试方法创建。
在IUser中,定义一个方法接口。ShowName,用来接收一个字符串,返回一个字符串。
[ServiceContract] public interface IUser { [OperationContract] string ShowName(string name); }
在IAnimal中,定义一个方法接口。DoWork,也用来接收一个字符串,返回一个字符串。
[ServiceContract] public interface IAnimal { [OperationContract] string DoWork(string a); }
记得在方法前面增加
[OperationContract]
在Animal.scv 和User.svc 中分别实现接口方法。
public class User : IUser { #region IUser 成员 public string ShowName(string name) { return string.Format("Test:{0}", name); } #endregion }
public class Animal : IAnimal { public string DoWork(string a) { return string.Format("Animal Test:{0}", a); } }
- 测试实例调用。
1 static void Main(string[] args) 2 { 3 string a = Console.ReadLine(); 4 5 //根据建议,也这么实例化一个 6 SRUserWSDL.UserClient b = new SRUserWSDL.UserClient(); 7 8 //调用方法 9 a = b.ShowName(a);10 //关闭连接 11 b.Close();12 //将返回的结果展示在屏幕上 13 Console.WriteLine(a);14 15 a = Console.ReadLine();16 17 //实例化一个参数更改的方式18 //Service在本地建立的时候,可能是localhost,但是发布的时候,该ip地址可能会发生变化。19 //BasicHttpBinding_IAnimal 这个字段来自 客户端(调用端) 的config里面。而不是WCF服务的服务段的config里面20 AnimalService.AnimalClient c = new AnimalService.AnimalClient("BasicHttpBinding_IAnimal", "http://192.168.159.142/WcfService1/Animal.svc");21 22 a = c.DoWork(a);23 24 c.Close();25 26 Console.WriteLine(a);27 28 a = Console.ReadLine();29 30 //另一种连接地址变化的方法31 AnimalService.AnimalClient d = new AnimalService.AnimalClient();32 33 d.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://192.168.159.142/WcfService1/Animal.svc"); 34 35 a = d.DoWork(a);36 d.Close();37 38 Console.WriteLine(a);39 40 Console.ReadKey();41 }
1 protected void Page_Load(object sender, EventArgs e)2 {3 AnimalService.AnimalClient c = new AnimalService.AnimalClient("BasicHttpBinding_IAnimal", "http://192.168.159.142/WcfService1/Animal.svc");4 5 Response.Write(c.DoWork("webtest"));6 Response.Flush();7 }
- 调用结果
winform端:
web端:
后续如果还有进一步发现或者问题修改还会继续补充。