WCF Services Rest Call - PullRequest
       5

WCF Services Rest Call

1 голос
/ 05 декабря 2011

У меня есть служба WCF, вызываемая в SOAP и REST. Если вызов make SOAP работает правильно, но с REST у меня проблемы.

В итоге, метод возвращает POCO ENTITY, но при вызове я получаю сообщение об ошибке подключения, отмененное. То же самое не произойдет, если я вызову другой метод, который возвращает логическое значение или строку (т.е. нативные типы).

Мне показалась ошибка, что сущность POCO, которую я использую, на самом деле не была (это то, что я использую Devart, так что я уверен, что это так). Итак, что я сделал, я создал свою карту (с тем же свойством) и использовал AutoMapper для создания карт.

Проблема все еще существует: - (

Это .svc.cs

 public List<GetLuoghiSimiliByAddressesDTO> GetLuoghiSimiliByAddress(string toponimo, string nomestrada, string civico, int idcomune)
    {
        Agile.SL.Services.IAnagraficaService srv = new Agile.SL.Services.Impl.AnagraficaService();
        List<GetLuoghiSimiliByAddressesDTO> result = new List<GetLuoghiSimiliByAddressesDTO>();
        Mapper.CreateMap<DTOGetLuoghiSimiliByAddress, GetLuoghiSimiliByAddressesDTO>();
        foreach (var dto in srv.GetLuoghiSimiliByAddress(toponimo, nomestrada, civico, idcomune).ToList<DTOGetLuoghiSimiliByAddress>())
        {
            GetLuoghiSimiliByAddressesDTO newdto = Mapper.Map<DTOGetLuoghiSimiliByAddress, GetLuoghiSimiliByAddressesDTO>(dto);
            result.Add(newdto);
        }

        return result;
    }

результат содержит правильно мой список объектов.

Это svc

[OperationContract]
    [WebGet(UriTemplate = "GetLuoghiSimiliByAddress?Toponimo={toponimo}&Nome_Strada={nomestrada}&Civico={civico}&Id_Comune={idcomune}",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)]
    List<GetLuoghiSimiliByAddressesDTO> GetLuoghiSimiliByAddress(string toponimo, string nomestrada, string civico, int idcomune);

Правильно работать с этим методом и договором на эксплуатацию

    public bool IsUserAlreadyRegistered(string email)
    {
        Agile.SL.Services.IAnagraficaService srv = new Agile.SL.Services.Impl.AnagraficaService();
        return srv.CheckEmailExistance(email);
    }            

[OperationContract]
[WebGet(UriTemplate = "IsUserAlreadyRegistered?Email={email}",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
bool IsUserAlreadyRegistered(string email);

это GetLuoghiSimiliByAddressesDTO

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace Merqurio.Agile.DL.Model.Entities
{
    [DataContract(IsReference = true)]
    [Serializable]
    public class GetLuoghiSimiliByAddressesDTO
    {

        private int _Id_Luogo;
        private string _Toponimo;
        private string _Nome_Strada;
        private string _Civico;


        public GetLuoghiSimiliByAddressesDTO()
        {

        }


    /// <summary>
    /// There are no comments for Id_Luogo in the schema.
    /// </summary>
        [DataMember(Order=1)]
        public int Id_Luogo
        {
            get
            {
                return this._Id_Luogo;
            }
            set
            {
                if (this._Id_Luogo != value)
                {
                    this._Id_Luogo = value;
                }
            }
        }


    /// <summary>
    /// There are no comments for Toponimo in the schema.
    /// </summary>
        [DataMember(Order=2)]
        public string Toponimo
        {
            get
            {
                return this._Toponimo;
            }
            set
            {
                if (this._Toponimo != value)
                {
                    this._Toponimo = value;
                }
            }
        }


    /// <summary>
    /// There are no comments for Nome_Strada in the schema.
    /// </summary>
        [DataMember(Order=3)]
        public string Nome_Strada
        {
            get
            {
                return this._Nome_Strada;
            }
            set
            {
                if (this._Nome_Strada != value)
                {

                    this._Nome_Strada = value;

                }
            }
        }


    /// <summary>
    /// There are no comments for Civico in the schema.
    /// </summary>
        [DataMember(Order=4)]
        public string Civico
        {
            get
            {
                return this._Civico;
            }
            set
            {
                if (this._Civico != value)
                {

                    this._Civico = value;

                }
            }
        }


    }

}

Пожалуйста, помогите мне!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Какой код ошибки вы получаете, когда делаете вызов REST.Также попробуйте включить трассировку на вашем сервисе, чтобы понять, почему запрос не выполняется через REST.Чтобы включить трассировку, перейдите по этой ссылке

. Также попробуйте использовать fiddler для проверки вашего запроса, направляемого в ваш сервис.

0 голосов
/ 06 декабря 2011

Нельзя использовать «IsReference = true» в вашем DataContract.

Из MSDN:

Используйте свойство IsReference, чтобы указать DataContractSerializer вставлять XML-конструкции, сохраняющие объект.справочная информация.

Вы возвращаете JSON, а не XML ...

В любом случае вам здесь это не нужно, я не вижу никакой циклической зависимости.

...