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