2013-04-16 3 views
1

У меня естьWCF Rest Изменить имя корневого элемента возврата

[OperationContract] 
[WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Xml, 
    RequestFormat = WebMessageFormat.Xml, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "projects/{projectname}")] 
[return: MessageParameter(Name = "ProjectId")] 
Guid CreateProject(String projectName); 

Но это по-прежнему возвращает

<guid 
xmlns="http://schemas.microsoft.com/2003/10/Serialization/">00000000-0000-0000-0000-00000000</guid> 

Как заменить "справ" с ProjectID?

public Guid CreateProject(String projectName) 
{ 
    return Guid.Empty; 
} 

Если изменить OperationContract Bodystyle к WrappedResponse я получаю:

<CreateProjectResponse 
    xmlns="http://tempuri.org/"> 
    <ProjectId>00000000-0000-0000-0000-000000000</ProjectId> 
</CreateProjectResponse> 

Что почти то, что я хочу, но я не хочу излишне завернуты.

+0

И что возвращает CreateProject? Действительно ли руководство? – evgenyl

+0

показать еще код => вы только разместили интерфейс и результат ... но не реализацию сервиса. – Cybermaxs

+0

Он возвращает указатель в формате в моем сообщении. – Shawn

ответ

0

простое решение состоит в

return new XElement("ProjectId", Guid.Empty); 

Не совсем то, что я хотел, но это работает.

0

Вы становитесь тем, что вы определили. Вы определили, что хотите получить пустой GUID в форме XML, и он возвращает вам пустой GUID в XML. Все в порядке.

Может быть, вам нужно преобразовать GUID в какой-то идентификатор строки, то Guid.NewGuid().ToString("N")

Когда вы не ожидали XML, то вам необходимо установить атрибуты и использовать HTTP Accept заголовок от клиента, например, для Json Accept: application/json или строка - plain/text

UPD: Теперь немного ясно. На самом деле вы спрашиваете, как изменить структуру XML. Я рекомендую вам для стандартных типов использовать стандартную структуру XML, потому что вы уже внедрили из коробки XML форматировщики. Во всяком случае, когда вам нужно изменить форматтер, вы можете сделать это путем расширения WebHttpBehavior и переопределения метода WebHttpBehavior.GetReplyDispatchFormatter вернуть нашу собственную реализацию System.ServiceModel.Dispatcher.IDispatchFormatter (как пример чтение here)

Я хочу также просто упомянуть , что вы используете WCF 4 REST, и эта технология устарела. Когда вы имеете дело не с устаревшим проектом или обслуживанием, то я рекомендую вам использовать ASP.NET Web API, потому что это и многое другое можно сделать там намного проще.

+0

Я не верю, что определил его, чтобы принять пустой Гид. Мой вопрос заключается в том, как отформатировать возвращаемый XML, чтобы сказать 000-000-00 вместо ? – Shawn

+0

Я ответил в разделе UPD в ответ – Regfor