2010-02-13 53 views
1

有誰知道在WCF中列出各種操作合同的UriTemplate的方法嗎?我想要做的是以某種方式在IntegrationTesting中創建自己託管的服務並遍歷所有操作合同並儘可能地打印UriTemplates。列出WCF操作合同的UriTemplate?

回答

4

你的意思是行動? OperationContract上沒有UriTemplate屬性。

如果是,您可以使用反射來獲取類型的方法,並從每個方法獲取OperationContractAttribute以獲取它的Action屬性。

var methods = typeof (IService1).GetMethods(); 
IEnumerable<string> actions = methods.Where(
    m => m.GetCustomAttributes(typeof (OperationContractAttribute), true).Count() > 0) 
    .Select(m => 
     ((OperationContractAttribute)m.GetCustomAttributes(typeof (OperationContractAttribute), true).First()).Action); 

Console.WriteLine(string.Join("\r\n",actions.ToArray())); 

編輯:正如馬克提到,你可能會WebGet後,所以用WebGetAttributeActionUriTemplate或任何屬性,你希望看到的替換OperationContractAttribute

+0

WCF REST方法基本上在每種方法上都具有[OperationContract]和[WebGet]屬性。我認爲這就是OP所追求的。 – 2010-02-13 17:13:01

+0

謝謝,馬克,我還沒有明確地使用REST,但現在你提到它... – 2010-02-13 20:58:00

+0

不完全是我在找什麼,但我改變了WebGetAttribute和WebInvokeAttribute,並能夠找到兩個有問題的Uri模板I寧願能夠得到那個正在運行的服務,但只要我可以測試它,我總是很開心:) – mhenrixon 2010-02-13 23:30:03