WCF休みスターターキット-プロパティの名前UriTemplateMatchResults'がすでに存在する
-
22-08-2019 - |
質問
こんにちは、WCF休みスターターキットです。
作成した簡単なるサービスの配列を返しオブジェクトです。
ブラウザの使用を、すべての作品が生きているから、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.ます。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;
感謝です。
André Carlucci
解決
同じ問題は、障害者のページで固定します。は、例外がスローされる場合がurlたシーケンス。ジチオカーバマートが待ちの間に発信します。
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new WebServiceHost2(serviceType, true, baseAddresses) {EnableAutomaticHelpPage = false};
}
他のヒント
また、同じprobemが見たかったのページで無効な解決策でした。していることが分かったURITemplating、WCF休ツールキットの原因とな問題が見られることで、既にこのテンプレートのテンプレートです。基本的にはす必要があるテンプレート時のURLをご方法によって異なります要求されたデータは、そのテンプレートを割り当てるべきなのです。また、同じURITemplates私が委託された当該業務を適切に遂行のUrlと異ならなかったとは別のクエリの原因となるこのエラーになります。しかし実際に必要がなかったたず孔されており、少なくとも、委託された当該業務を適切に遂行さyouvannot作のクエリがURLの場合はお手法が必要で複雑なオブジェクトとして渡されるパラメータとします。そのURITemplate指定されたパラメータからのWebInvoke属性にサービスインタフェースだと思い解決の問題です。もちろんばくのクエリをサーバに依存するURITemplatingんいのいずれかけとは離れのページです。
私の場合、問題のみ発生した場合、アクセスの評価項目を使用し、WCFチャンネル、Visual Studioのデバッガの統合を有効にします。
私の問題を加えることによりコードの削除VS行動からChannelFactory:
var vsBehaviour = channelFactory.Endpoint.EndpointBehaviors
.FirstOrDefault(i =>
i.GetType().Namespace == "Microsoft.VisualStudio.Diagnostics.ServiceModelSink");
if (vsBehaviour != null)
{
channelFactory.Endpoint.Behaviors.Remove(vsBehaviour);
}
そうであるその他の方法を無効にするWCF Visual Studioのデバッガの統合がいシステム全体が、このソリューションです。