ps:本Demo只是演示如何快速建立WCF
新建BLL类库项目,添加UserInfo类如下:
1 namespace Model 2 { 3 [DataContract] 4 public class UserInfo 5 { 6 [DataMember] 7 public int Id { get; set; } 8 [DataMember] 9 public string Name { get; set; } 10 } 11 }
当实体对象作为网络传输时需要被序列化,所以注意以下几点:
1.不给任何标记将会做XML映射,所有公有属性/字段都会被序列化
2.[Serializable]标记会将所有可读写字段序列化
3.[DataContract]和[DataMember]联合使用来标记被序列化的字段
接下来,新建IBLL类库项目,添加IUserInfoService类作为接口契约,代码如下:
1 namespace IBLL 2 { 3 [ServiceContract] 4 public interface IUserInfoService 5 { 6 [OperationContract] 7 UserInfo GetUser(int id); 8 } 9 }
ps:需要操作的方法一定要记得打上标签!
同样,新建BLL类库项目,添加UserInfoService类,代码如下(只为测试WCF搭建):
1 namespace BLL 2 { 3 public class UserInfoService:IUserInfoService 4 { 5 public UserInfo GetUser(int id) 6 { 7 return new UserInfo() { Id = id, Name = "test" }; 8 } 9 } 10 }
新建一个控制台项目,在配置文件app.config中的configuration节点下添加:
<system.serviceModel> <services> <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration"> <host> <baseAddresses> <add baseAddress="http://localhost:8000/"/> </baseAddresses> </host> <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="behaviorConfiguration"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
注意以下几点:
1.因为是本地测试,所以baseAddress填写了本地的地址,这个可以根据实际修改。
2.service节点的name属性要修改为BLL层具体服务类的“命名空间+类名”。
3.endpoint节点的contract属性要修改为IBLL层具体服务类接口的“命名空间+接口名”。
主程序代码中添加:
1 using (ServiceHost host = new ServiceHost(typeof(UserInfoService))) 2 { 3 host.Open(); 4 Console.WriteLine("服务已启动,按任意键中止..."); 5 Console.ReadKey(); 6 host.Close(); 7 }
ps:typeof()中换成要调用的服务类。
在项目上右键选择“在文件资源管理器中打开文件夹”,找到可执行程序WCFService.exe,右键选择“以管理员身份运行”。
1 UserInfoServiceClient client = new UserInfoServiceClient(); 2 UserInfo u = client.GetUser(5); 3 MessageBox.Show(u.Id + "-" + u.Name);
运行后,弹出消息,表示WCF服务搭建成功!