我剛開始使用WCF REST入門工具包。WCF REST入門工具包 - 名稱爲'UriTemplateMatchResults'的屬性已存在
我創建了一個簡單的服務,返回一個對象的數組。
使用瀏覽器,一切工作正常,但是當我使用WCF客戶端,我得到一個ArgumentException。
我不使用IIS和這裏是代碼:
合同:
[ServiceContract]
public interface IGiftService {
[WebGet(UriTemplate="gifts")]
[OperationContract]
List<Gift> GetGifts();
}
public class GiftService : IGiftService {
public List<Gift> GetGifts() {
return new List<Gift>() {
new Gift() { Name = "1", Price = 1.0 },
new Gift() { Name = "2", Price = 1.0 },
new Gift() { Name = "3", Price = 1.0 }
};
}
}
[DataContract]
public class Gift {
[DataMember]
public string Name { get; set; }
[DataMember]
public double Price { get; set; }
}
要啓動服務:
WebServiceHost2 host = new WebServiceHost2(
typeof(GiftService),
true,
new Uri("http://localhost:8099/tserverservice"));
host.Open();
Console.WriteLine("Running");
Console.ReadLine();
host.Close();
要啓動客戶:
WebChannelFactory<IGiftService> factory = new WebChannelFactory<IGiftService>(
new Uri("http://localhost:8099/tserverservice"));
IGiftService service = factory.CreateChannel();
List<Gift> list = service.GetGifts();
Console.WriteLine("-> " + list.Count);
foreach (var item in list) {
Console.WriteLine("-> " + item.Name);
}
服務器和客戶端處於相同的解決方案,我在兩個(用於描述服務合同)中使用相同的接口。
異常情況說:「名稱爲'UriTemplateMatchResults'的屬性已經存在。」那就是堆棧跟蹤:
射擊類除外 - > Microsoft.ServiceModel.Web.WrappedOperationSelector
堆棧跟蹤:
at System.ServiceModel.Channels.MessageProperties.UpdateProperty(String name, Object value, Boolean mustNotExist)
at System.ServiceModel.Channels.MessageProperties.Add(String name, Object property)
at System.ServiceModel.Dispatcher.WebHttpDispatchOperationSelector.SelectOperation(Message& message, Boolean& uriMatched)
at System.ServiceModel.Dispatcher.WebHttpDispatchOperationSelector.SelectOperation(Message& message)
at Microsoft.ServiceModel.Web.WrappedOperationSelector.SelectOperation(Message& message) in C:\Program Files\WCF REST Starter Kit\Microsoft.ServiceModel.Web\WrappedOperationSelector.cs:line 42
at Microsoft.VisualStudio.Diagnostics.ServiceModelSink.ServiceMethodResolver.GetOperation()
at Microsoft.VisualStudio.Diagnostics.ServiceModelSink.ServiceMethodResolver..ctor(ContractDescription contract, DispatchRuntime runtime, Message request, InstanceContext instanceContext)
我在做什麼錯?
更新:我禁用了幫助頁面,服務正在運行。這是一個錯誤嗎?
host.EnableAutomaticHelpPage = false;
謝謝!
安德烈·卡盧奇
如果REST入門工具包的功能爲您提供了所需的功能,那麼請繼續操作。如果你正在學習如何做REST,那就遠離它吧。回到標準的RPC風格太容易了。 – 2009-02-10 01:31:21