WCF、WebAPI、WCFREST、WebService之間的區別

原文網址:https://read01.com/6GdOdP.html

 

在.net平台下,有大量的技術讓你創建一個HTTP服務,像Web Service,WCF,現在又出了Web API。在.net平台下,你有很多的選擇來構建一個HTTP Services。我分享一下我對Web Service、WCF以及Web API的看法。

Web Service

1、它是基於SOAP協議的,數據格式是XML

2、只支持HTTP協議

3、它不是開源的,但可以被任意一個了解XML的人使用

4、它只能部署在IIS上

WCF

1、這個也是基於SOAP的,數據格式是XML

2、這個是Web Service(ASMX)的進化版,可以支持各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.

3、WCF的主要問題是,它配置起來特別的繁瑣

4、它不是開源的,但可以被任意一個了解XML的人使用

5、它可以部署應用程式中或者IIS上或者Windows服務中

WCF Rest

1、想使用WCF Rest service,你必須在WCF中使用webHttpBindings

2、它分別用[WebGet]和[WebInvoke]屬性,實現了HTTP的GET和POST動詞

3、要想使用其他的HTTP動詞,你需要在IIS中做一些配置,使.svc文件可以接受這些動詞的請求

4、使用WebGet通過參數傳輸數據,也需要配置。而且必須指定UriTemplate

5、它支持XML、JSON以及ATOM這些數據格式

Web API

1、這是一個簡單的構建HTTP服務的新框架

2、在.net平台上Web API 是一個開源的、理想的、構建REST-ful 服務的技術

3、不像WCF REST Service.它可以使用HTTP的全部特點(比如URIs、request/response頭,緩存,版本控制,多種內容格式)

4、它也支持MVC的特徵,像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴注入(DI),單元測試。這些可以使程序更簡單、更健壯

5、它可以部署在應用程式和IIS上

6、這是一個輕量級的框架,並且對限制帶寬的設備,比如智慧型手機等支持的很好

7、Response可以被Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。

2018年萬金石馬

近期跑的最辛苦的馬,變步兵又曬傷,還一度想棄賽~

前半馬陰天無風很好跑,但後半出大太陽才是重頭戲,
先是水站缺水杯,又遇缺水,
21K約花2.5H,但在28K速度就HOLD不住了
抽筋也是免不了的,約在32K慘案發生,
5小時是不可能了,只求無傷完賽,
走走停停,當欣賞風景囉!

PS1.顏值高的馬尾妹真多
PS2.配速員:戴2016大阪馬帽的馬尾妹,感謝有您
PS3.第一次沒帶手機在身上,解放的感覺真好

最大群組關聯

近期遇到最難的邏輯

if object_id('tempdb..#IL_Benson') is not null
	drop table #IL_Benson ;

create table #IL_Benson (
	ActSeq varchar(19) --18
	, GCNo varchar(21) --21
	, ActSeq_T varchar(19)
	, GCNo_T varchar(21)
	, RUN int default 0) ;

insert into #IL_Benson (ActSeq, GCNo)
values ('ACT1', 'A')
, ('ACT2', 'B'), ('ACT2', 'C'), ('ACT2', 'D')
, ('ACT3', 'A'), ('ACT3', 'C')
, ('ACT4', 'D')
, ('ACT5', 'D'), ('ACT5', 'E')
, ('ACT6', 'F'), ('ACT6', 'G')
, ('ACT7', 'F')
, ('ACT8', 'G'), ('ACT8', 'H')
, ('ACT9', 'Z')

/*
update a
set a.RUN = 0
	, a.ActSeq_T = null
	, a.GCNo_T = null
from #IL_Benson a

select a.ActSeq, a.GCNo, a.ActSeq_T, a.GCNo_T, a.RUN
from #IL_Benson a
order by 1, 2
*/
--資料檢測,RUN<0
--(RUN=-1) 1 ACT to 1 GC
update a
set a.ActSeq_T = a.ActSeq
	, a.GCNo_T = a.GCNo
	, a.RUN = -1
from #IL_Benson a
inner join (
	select a.ActSeq, count(distinct  a.GCNo) CNT
	from #IL_Benson a
	group by a.ActSeq
	having count(distinct  a.GCNo) = 1 ) b
	on a.ActSeq = b.ActSeq
inner join (
	select a.GCNo, count(distinct a.ActSeq) CNT
	from #IL_Benson a
	group by a.GCNo
	having count(distinct  a.ActSeq) = 1 ) c
	on a.GCNo = c.GCNo
;

--(RUN=-2) 1 ACT to Multi GC and 1 GC to 1 ACT
update a
set a.ActSeq_T = a.ActSeq
	, a.GCNo_T = b.GCNo_T
	, a.RUN = -2
--select count(*)
from #IL_Benson a
inner join (
	select a.ActSeq, count(distinct  a.GCNo) CNT, min(a.GCNo) GCNo_T
	from #IL_Benson a
	group by a.ActSeq
	having count(distinct  a.GCNo) > 1 ) b
	on a.ActSeq = b.ActSeq
inner join (
	select b.ActSeq, count(distinct a.ActSeq) cnt
	from #IL_Benson a
	inner join (
		select a.ActSeq, a.GCNo
		from #IL_Benson a
		inner join (
			select a.ActSeq, count(distinct  a.GCNo) CNT
			from #IL_Benson a
			group by a.ActSeq
			having count(distinct  a.GCNo) > 1 ) b
			on a.ActSeq = b.ActSeq ) b
		on a.GCNo = b.GCNo
	group by b.ActSeq
	having count(distinct a.ActSeq) = 1 ) c
	on a.ActSeq = c.ActSeq
where a.ActSeq_T is null
and a.GCNo_T is null
;

--(RUN=-3) 1 ACT to 1 GC and 1 GC to Multi ACT
update a
set a.ActSeq_T = b.ActSeq_T
	, a.GCNo_T = a.GCNo
	, a.RUN = -3
--select count(*)
from #IL_Benson a
inner join (
	select a.GCNo, count(distinct a.ActSeq) CNT, min(a.ActSeq) ActSeq_T
	from #IL_Benson a
	group by a.GCNo
	having count(distinct  a.ActSeq) > 1 ) b
	on a.GCNo = b.GCNo
inner join (
	select b.GCNo, count(distinct a.GCNo) cnt
	from #IL_Benson a
	inner join (
		select a.ActSeq, a.GCNo
		from #IL_Benson a
		inner join (
			select a.GCNo, count(distinct a.ActSeq) CNT
			from #IL_Benson a
			group by a.GCNo
			having count(distinct a.ActSeq) > 1 ) b
			on a.GCNo = b.GCNo ) b
		on a.ActSeq = b.ActSeq
	group by b.GCNo
	having count(distinct a.GCNo) = 1
	) c
	on a.GCNo = c.GCNo
where a.ActSeq_T is null
and a.GCNo_T is null
;

--select * from #IL_Benson
--------------------------------------
--補衍伸關聯資料,RUN=1
DECLARE @RC INT
DECLARE @RUN INT

select @RC = count(*)
--select count(*)
from #IL_Benson a
where a.ActSeq_T is null

WHILE @RC > 0
BEGIN

	SET @RC = 0

	insert into #IL_Benson (ActSeq, GCNo, RUN)
	select distinct b.ActSeq_T ActSeq, a.GCNo, 1
	from #IL_Benson a
	inner join (
		select distinct b.ActSeq ActSeq_T, a.ActSeq, b.GCNo
		from #IL_Benson a
		inner join (
			select distinct a.ActSeq, a.GCNo
			from #IL_Benson a
			where a.ActSeq_T is null
			--and a.ActSeq = '3'
			) b
			on a.GCNo = b.GCNo ) b
		on a.ActSeq = b.ActSeq
	left outer join #IL_Benson c
		on b.ActSeq_T = c.ActSeq
		and a.GCNo = c.GCNo
		and c.ActSeq_T is null
	where a.ActSeq_T is null
	and c.ActSeq is null

	set @RC = @RC + @@ROWCOUNT
	--select * from #IL_Benson where Run=1

	insert into #IL_Benson (ActSeq, GCNo, RUN)
	select distinct a.ActSeq, b.GCNo_T GCNo, 1
	from #IL_Benson a
	inner join (
		select distinct b.GCNo GCNo_T, b.ActSeq, a.GCNo
		from #IL_Benson a
		inner join (
			select distinct a.ActSeq, a.GCNo
			from #IL_Benson a
			where a.ActSeq_T is null
			--and a.GCNo = 'D'
			) b
			on a.ActSeq = b.ActSeq ) b
		on a.GCNo = b.GCNo
	left outer join #IL_Benson c
		on a.ActSeq = c.ActSeq
		and b.GCNo_T = c.GCNo
		and c.ActSeq_T is null
	where a.ActSeq_T is null
	and c.ActSeq is null

	set @RC = @RC + @@ROWCOUNT
	--select * from #IL_Benson where Run=1

	--select a.RUN, count(*)
	--from #IL_Benson a
	--where a.ActSeq_T is null
	--group by a.RUN
END

update a
set a.ActSeq_T = a.ActSeq
	, a.GCNo_T = a.GCNo
from #IL_Benson a
where a.ActSeq_T is null
and a.GCNo_T is null

--select * from #IL_Benson order by ActSeq_T,GCNo_T
--------------------------------------
declare @RC INT
select @RC = count(*)
from #IL_Benson a
where a.RUN >= 0
--select @RC

WHILE @RC > 0
BEGIN

	SET @RC = 0

	update a
	set a.ActSeq_T = b.ActSeq
	--select count(*)
	from #IL_Benson a
	inner join (
		select a.GCNo GCNo, min(a.ActSeq) ActSeq
		from #IL_Benson a
		where a.RUN >= 0
		group by a.GCNo ) b
		on a.GCNo_T = b.GCNo
		and a.ActSeq_T <> b.ActSeq
	where a.RUN >= 0

	SET @RC = @RC +  @@ROWCOUNT

	update a
	set a.GCNo_T = b.GCNo
	--select count(*)
	from #IL_Benson a
	inner join (
		select a.ActSeq ActSeq, min(a.GCNo) GCNo
		from #IL_Benson a
		where a.RUN >= 0
		group by a.ActSeq ) b
		on a.ActSeq_T = b.ActSeq
		and a.GCNo_T <> b.GCNo
	where a.RUN >= 0

	SET @RC = @RC +  @@ROWCOUNT

END

--select * from #IL_Benson order by ActSeq,GCNo