Изменение в 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);
}
Другие вопросы по тегам