2012-01-03 5 views
5

Я пытаюсь создать службу WCF, которая предоставляет SOAP и конечную точку JSON.
Для сопоставления параметров URL-адреса запроса с параметрами метода, я использую метод UriTemplate.Параметры карты URI для свойств объекта параметра?

Это отлично подходит для методов, ожидающих параметров простых типов данных.

Однако следующий метод ожидает сложный объект, и я не хочу, чтобы изменить его из-за SOAP-часть службы:

[OperationContract] 
Person Test(TestParameters parameters); 

в то время как TestParameters выглядит (с большим количеством свойств):

[DataContract] 
public class TestParameters 
{ 
    [DataMember] 
    public string First 
    { 
     get; 
     set; 
    } 
    [DataMember] 
    public string Second 
    { 
     get; 
     set; 
    } 
} 

При вызове метода с помощью GET сейчас, я хотел бы иметь возможность инициализировать parameters.First и parameters.Second из запроса URI, например,

/Test?first=Foo&second=Bar 

Я уже пытался применять

[WebGet(UriTemplate = "/Test?first={parameters.First}&second={parameters.Second})] 

методу.
Однако этот синтаксис не поддерживается WCF. Сообщение об ошибке говорит:

System.InvalidOperationException: Операция «Test» в контракте «IService1» имеет UriTemplate, что ожидает параметр с именем «PARAMETERS.FIRST», но нет входного параметра с таким именем Операция.

Есть ли другой синтаксис, который позволяет формулировать отображение параметров URI свойствам объектов параметров?

В противном случае вы знаете, легко ли это добавление?

Большое спасибо за ваши ответы!

ответ

1

Вам придётся прибегнуть к JSON, например, в сочетании с методом PUT или POST. См. this post для объяснения.

Смежные вопросы