Передать массив srtucts как параметр метода WCF в HTTP GET - PullRequest
1 голос
/ 23 сентября 2010

У меня есть метод WCF, который получает массив структур.структура содержит две строки «Key» и «Value»:

public struct mydata
{
    public String key;
    public String value;
}

[ServiceContract]
public interface IBasicService
{

    [OperationContract]
    [WebGet(UriTemplate = "ReceiveStructsOfData?myDataArray={???????? WHAT DO I WRITE HERE?????}")] 
    void ReceiveStructsOfData(mydata[] myDataArray);

}

Я хочу, чтобы метод поддерживал HTTP «GET».я уже знаю, как настроить WCF для поддержки «GET» (конечная точка и WebGETAttribute).Что я пишу в UriTemplate WebGet (см. Пример выше) ??

как будет выглядеть код клиента при использовании Framework 2.0 (HttpWebRequest)?

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/BasicWCF/BasicService.svc/ReceiveStructsOfData?myDataArray={???????? WHAT DO I WRITE HERE?????}");
        myHttpWebRequest.Method = "GET";
        HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

спасибо ...

1 Ответ

1 голос
/ 23 сентября 2010

В фигурных скобках вы указываете имя параметра, которое будет заменено значением. Таким образом, метод обслуживания будет выглядеть так:

[OperationContract]  
[WebGet(UriTemplate = "ReceiveStructsOfData?myDataArray={myDataArray}")]  
void ReceiveStructsOfData(mydata[] myDataArray)
{
}

Обратите внимание, что строка между фигурными скобками совпадает с именем параметра - так выполняется сопоставление запросов с методами.

При вызове службы вы должны позаботиться о сериализации массива в строку. В конце концов, вы передаете параметры в URL, который сам по себе является строкой. Обычно я бы не передавал такой параметр в метод GET. Если это был метод PUT и вы передавали параметры в запросе (а не URL), то вы можете сериализовать их как JSON или XML, в зависимости от службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...