2013-07-03 3 views
1

Это моя первая попытка сервиса через WCF, который размещен в службе Windows. Я заметил, что если я что-то неправильно сделаю в UriTemplate, он полностью сломает все, и я не знаю почему.Изменение UriTemplate на интерфейсе WCF приводит к сбою всего обслуживания.

Пример:

В первом примере кода все отлично работает. Служба ждет моего определенного базового адреса и возвращает ожидаемую информацию.

[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, а не нарушать всю систему?

Также, чтобы расширить это, как добавить регистрацию в свою службу.

ответ

0

При использовании 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); 
} 
+0

Да я понимаю, тот факт, что они должны быть строками, но я не знаю, почему, что один из них неправильно определены причины целого webservice терпеть неудачу? – CathalMF

+1

При запуске активация WCF проверяет декларацию и конфигурацию сервиса. Вы не можете частично запустить службу WCF. – Cybermaxs