我刚开始使用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