Изменение в UriTemplate на интерфейсе WCF приводит к сбою всей службы.
Это моя первая попытка использования службы через WCF, которая размещена в службе Windows. Я заметил, что если я что-то делаю неправильно в 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 и не сломать всю систему?
Также, чтобы узнать, как я могу добавить ведение журнала в мой сервис.
1 ответ
Когда используешь WebGet
или же WebInvoke
Переменные UriTemplate в пути должны быть строками. Вы можете связать переменные UriTemplate только с int, long и т. Д., Когда они находятся в части запроса UriTemplate, как в первом примере.
Таким образом, очень простой способ решить вашу проблему может быть
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(UriTemplate = "/GetDetail/{id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
MyDetail GetDetail(string id);
}