解決相關(guān)WCF Service事件
昨天到今天搞了一整天的WCF Service,我都快崩潰了! ,以后再也不能隨便的關(guān)機了,因為這次的不小心,幾乎所有的Net安裝,調(diào)試問題都被我碰到了,還好,我一個個把他記錄下來了,同時,在相關(guān)論壇上找了一些相關(guān)的解決辦法,分享一下,供大家相互學(xué)習(xí)交流。
我有一個寄宿在ASP.NET站點中的WCF Service,物理路徑形如“/MyService/Service.svc”。現(xiàn)在,我希望將形如“http://localhost/beta/MyService/Service.svc”這樣的URL重寫到“~/MyService/Service.svc?ver=beta”。
***步遇到的問題:
按照常理,應(yīng)該在HttpApplication的PostAuthenticateRequest事件中做重寫??蓪τ?svc的請求,根本就不會觸發(fā)這個事件。于是只好改在BeginRequest事件中做重寫。
第二步遇到的問題:
在BeginRequest中進(jìn)行重寫后,通過http://localhost/beta/MyService/Service.svc這樣的路徑雖然可以正確訪問到我的Service,但通過IE瀏覽其helper頁,得到的wsdl地址卻是http://localhost/MyService/Service.svc?wsdl,這導(dǎo)致我的代碼因為無法識別版本號而出錯。#t#
同樣,在另外一個測試項目中添加服務(wù)引用,也會因為我的代碼出錯而無法添加引用,希望大家能給出在WCF中使用URL重寫的方案。
前面的示例中沒有使用消息合同規(guī)范。如果使用消息合同,就應(yīng)定義一個表示消息的類,再給類應(yīng)用MessageContractAttribute屬性。接著給這個類的成員應(yīng)用Message Body MemberAttribute、MessageHeaderAttribute或MessageHeaderArrayAttribute屬性。所有這些屬性都在System. ServieceModel名稱空間中。如果要高度控制WCF服務(wù)使用的SOAP消息,就不要使用消息合同,所以這里不詳細(xì)討論它。
如果客戶應(yīng)用程序可以使用特定的異常類型,如定制異常,就可以給可能生成該異常的操作應(yīng)用System.ServieceModel.FaultContractAttribute屬性。在最初使用WCF時不希望這么做。