Вызов веб-сервиса .net со сложными параметрами - PullRequest
1 голос
/ 21 сентября 2009

Я видел много примеров веб-сервисов json с WCF в asp.net, которые принимают один входной параметр. Мне нужен мой сервисный метод, чтобы принимать много параметров и возвращать список вроде этого;

Это мой Сервис.svc:

public class Car
{
    public string Title;
    public int Number;
}

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

public class Service
{

    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public List<Car> GetCarById(int userid, string password , List<Cars> carlist)
    {
        //Doing some stuff here
    }
}

В моем web.config:

<system.serviceModel>
   <behaviors>
       <endpointBehaviors>
             <behavior name="ServiceAspNetAjaxBehavior">
                 <enableWebScript />
             </behavior>
       </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
   <services>
         <service name="Service">
             <endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior"
 binding="webHttpBinding" contract="Service" />
          </service>
  </services>
  </system.serviceModel>

Как я могу вызвать эту услугу, если я хочу передать все эти параметры? Когда я пытаюсь вызвать метод с помощью идентификатора пользователя, пароля и карлиста, все они равны нулю. Это то, что я отправляю на http://localhost/Service.svc/GetCarById, используя POST в приложении Fiddler:

HEADERS:
Host: localhost
Content-Length: 136
Content-Type: application/json; charset=utf-8

BODY:
{"d":{"password":"test","userid":123,"carlist":[{"__type":"Car","Number":1,"Title":"BMW"},{"__type":"Car","Number":2,"Title":"Honda"}]}}

Ответ: {"d": null} Метод возвращает список, поэтому я знаю, что метод вызывается, и этот список равен нулю. Если я изменю метод на возвращение строки, например «Ошибка», я получу ее обратно, поэтому я знаю, что метод называется ..

У вас есть представление, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 21 сентября 2009

Наконец-то нашли решение:

Изменено с:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]

Просто:

[WebInvoke]

А потом я позвонил в сервис без начального "d", все отлично работает!

Спасибо за вашу помощь!

0 голосов
/ 21 сентября 2009

Можете ли вы изменить подпись вашего метода. Если так, то почему бы не создать объект Request, который инкапсулирует ваши параметры? Как это:

public class GetCarByIdRequest
{
   public int CarId {get;set;}
   public int Password {get;set;}
   public List<Car> CarList {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...