我需要調試一個WCF服務,但它需要有一個HTTP上下文。如何使用HTTP上下文調試WCF服務?
目前,我有一個WCF服務網站的解決方案,當我點擊調試它啓動,然後觸發了不包含任何測試形式的HTML頁面。
在項目運行時,我嘗試手動啓動wcftestclient,然後提供服務的地址,它找到服務,但是當我調用它時,它繞過IIS層(或開發服務器),所以httpContext爲空...
什麼是通過IIS上下文調試WCF服務的正確方法?
我需要調試一個WCF服務,但它需要有一個HTTP上下文。如何使用HTTP上下文調試WCF服務?
目前,我有一個WCF服務網站的解決方案,當我點擊調試它啓動,然後觸發了不包含任何測試形式的HTML頁面。
在項目運行時,我嘗試手動啓動wcftestclient,然後提供服務的地址,它找到服務,但是當我調用它時,它繞過IIS層(或開發服務器),所以httpContext爲空...
什麼是通過IIS上下文調試WCF服務的正確方法?
在WCF,HttpContext的是默認和設計設置爲NULL,即使WCF服務託管在IIS;畢竟,WCF是而不是 ASP.NET。
如果你真的這樣做需要一個HttpContext的,你需要單獨打開它,通過配置(web.config
如果你在IIS託管,您的自託管應用程序的app.config
否則):
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
,您需要指明該事實(即您的服務允許甚至預計,ASP.NET兼容模式)通過把這個屬性在服務類(實現服務合同):
[AspNetCompatibilityRequirements
(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class MyWCFService : IMyWCFService
{
......
}
RequirementsMode=Allowed
只是SIM卡ply允許ASP.NET兼容模式,而RequirementsMode=Required
實際上需要的是,並且在沒有它的情況下將不起作用。
一旦你這樣做,你應該把你的HttpContext.Current
當附加調試器到IIS工作進程。
Marc
此配置爲iis應用程序的web.config? – 2009-10-05 12:37:49
是的,這是您的其他WCF配置所在的位置 - 位於system.serviceModel部分。 IIS中的web.config或自託管應用程序的app.config。 – 2009-10-05 12:39:11
現在出現此錯誤:該服務無法激活,因爲它不支持ASP.NET兼容性。此應用程序啓用了ASP.NET兼容性。關閉web.config中的ASP.NET兼容模式,或將AspNetCompatibilityRequirements屬性添加到RequirementsMode設置爲「允許」或「必需」的服務類型。 – 2009-10-05 12:44:42
您將不得不將您的調試器(Visual Studio)附加到IIS服務進程。
在Visual Studio中,轉到調試 - >附加到進程並選擇附加到進程對話框中的IIS進程。
在IIS7,該進程的名稱是w3wp.exe的,但是你可能需要從所有用戶的所有會話選擇顯示過程或顯示過程中它變得可用之前。
當調試器正確連接到IIS進程,您可以設置在代碼中的一個或多個斷點和調用服務。
該過程的名稱是什麼? – 2009-10-05 12:15:30
@JL:編輯我的答案,包括過程的名稱。 – 2009-10-05 12:18:37
不幸的是不工作,斷點根本不符合。 – 2009-10-05 12:22:07
您必須附加到IIS進程,即XP下的aspnet_wp.exe和2003服務器上的w3wp.exe。這樣,如果你正在尋找一種方式來測試WCF服務本身,你會打斷點等
,我建議使用WcfTestClient。
記住,IIS進程將不會在任務管理器顯示,直到你重新啓動後點擊服務器至少一次(例如,你必須在服務器上打了一個頁面至少一次使過程開始)。
不起作用。斷點根本不符合,單獨使用WcfTestClient沒有http上下文。我需要一種方法來測試一個有效的httpContext。 – 2009-10-05 12:21:29
更正,符合斷點,但httpContext始終爲空 – 2009-10-05 12:29:22
感謝您的解決方案。我遇到了同樣的問題。 我的解決方案現在工作正常,2個svc文件。
爲了解決這個問題我做了兩個變化
在Web.Config中我評論線路
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
和
添加的屬性[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed) ]關於實現接口的類。
您需要在您的服務類中添加一個'AspNetCompatibilityRequirements'屬性 – 2009-10-05 13:01:19