WCF笔记

WCF

WCF属于SOAP范畴,用于通信

契约

契约在服务端和客户端都需要引用

  • 服务契约(接口)
[ServiceContract]
Interface IService {
[OperationContract]
方法声明();
…… 
}
  • 数据契约

数据契约特性只能用于类、枚举、结构体,但是不能用于接口DataContract没有继承性

[DataContract]
Class Model {
[DataMember]
属性;
…… 
}

服务端

  • 配置文件
 <system.ServiceModel>
	<services>
		<service name=”命名空间.实现服务契约的类名” behaviorConfiguration=”serviceBehaviors”>
			<host>
				<baseAddresses>
					<add baseAddress=”http://IP:端口号/路径名”/>
				</baseAddresses>
			</host>
			<endpoint address=”路径名”(可以省略?) binding=”basicHttpBinding” contract=” 命名空间.服务契约接口名” />
			<endpoint ……>
			……
		</service>
		<service ……/>  //多个服务基地址的IP和端口号可以相同,但路径名要有所不同
	</services>
	<behaviors ……/>
	<bindings>  //服务端客户端保持一致
		<basicHttpBinding>
			<bingding closeTimeout=00:10:00” receiveTimeout=00:20:00” sendTimeout=00:20:00”  maxBufferSize=2147483647” maxReceiveMessageSize=2147483647/>
		</basicHttpBinding>
	</bindings>
</system.ServiceModel>
  • 主程序
ServiceHost host = new ServiceHost(typeof(服务契约实现类))
Host.Opened += deleate{Console.WriteLine(“服务已启动”); }
Host.Open();

客户端

  • 配置文件
<system.ServiceModel>
	<bindings>  //服务端客户端保持一致
		<basicHttpBinding>
			<bingding closeTimeout=00:10:00” receiveTimeout=00:20:00” sendTimeout=00:20:00”  maxBufferSize=2147483647” maxReceiveMessageSize=2147483647/>
		</basicHttpBinding>
	</bindings>
	<client>
		<endpoint name=”” address=”http//IP:端口号/全路径” binding=”basicHttpBinding” contract=”命名空间.服务契约接口名” />
		<endpoint ……>
			……
	</client>
</system.ServiceModel>
  • 获取代理
  1. 通道工厂方式
ChannelFactory<服务契约(接口名)> cf = new ChannelFactory<服务契约(接口名)>(终结点名称)
服务契约(接口名) proxy = cf.CreateChannel();

WCF中实现多态

  • 使用接口作为参数

在[ServiceContract]后添加[ServiceKnowType(typeof(实现接口的类名))]

  • 使用父类作为参数

父类子类都要有[DataContract],父类上添加[KnownType(typeof(子类名))]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值