簡體   English   中英

WCF接口上UriTemplate的更改會導致整個服務失敗。

[英]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調用而不會破壞整個系統嗎?

還要對此進行擴展,如何將日志添加到服務中。

使用WebGetWebInvoke ,路徑中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM