[英]Change in UriTemplate on WCF interface causes whole service to fail.
這是我第一次嘗試通過Windows Service中托管的WCF服務。 我注意到,如果我在UriTemplate中做錯了什么,它將完全破壞一切,我不知道為什么。
例:
在第一個代碼示例中,一切正常。 該服務等待我定義的基地址,並返回我期望的信息。
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetDetail?id={id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
MyDetail GetDetail(int id);
}
在此示例中,我將UriTemplate = "/GetDetail?id={id}"
更改為UriTemplate = "/GetDetail/{id}"
一切都中斷了。 該服務甚至不等待我配置的基本地址。
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetDetail/{id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
MyDetail GetDetail(int id);
}
我不知道此更改如何導致一切失敗? 它不應該只是無法處理該GetDetail調用而不會破壞整個系統嗎?
還要對此進行擴展,如何將日志添加到服務中。
使用WebGet
或WebInvoke
,路徑中的UriTemplate變量必須為字符串 。 如第一個示例所示,僅當UriTemplate變量位於UriTemplate的查詢部分時,才可以將它們綁定到int,long等。
因此,解決您的問題的最基本方法可能是
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(UriTemplate = "/GetDetail/{id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
MyDetail GetDetail(string id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.