Почему WCF не работает так же, как ASMX? - PullRequest
3 голосов
/ 15 марта 2012

Не уверен, что я делаю неправильно, но у меня есть две службы, одна из них WCF, а другая - служба ASMX.

Я пытаюсь вызвать массив двойников так же, как в своей версии asmx.

Вот изображение двух сервисов:

enter image description here

Я получил исправление для возможности вызова этого метода, но я хотел бы знать, почему ArrayOfDouble не отображается так же в моем serviceref2, как в моем serviceref1?

ЭтоВерсия WCF:

namespace WcfSum
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface SumListWCF
    {

        [OperationContract]
        string CalculateSum(List<double> listDouble);
    }
}

namespace WcfSum
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class SumList : SumListWCF
    {
        public string CalculateSum(List<double> listDouble)
        {
            return listDouble.Sum().ToString();
        }
    }
}

Это версия ASMX:

namespace CalculateWebServiceSum
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class SumList : System.Web.Services.WebService
    {
        [WebMethod]
        public string CalculateSum(List<double> listDouble)
        {
            return listDouble.Sum().ToString();

             //return listDouble.Select(n => (double)n).ToString();
        }
    }
}

Предыдущий пост был здесь: Массив двойных WCF не был успешно вызван

Это обеспечило исправление, но не объясняет, почему оно работает не так.Или если бы был способ заставить его действовать так же.Что заставляет меня чувствовать, что я что-то упускаю?

РЕДАКТИРОВАТЬ

Ps они просто работают локально.

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

В стандартах SOAP или WSDL нет ничего, что указывало бы, как что-то вроде List<double> должно быть сериализовано.Очевидно, ASMX изобрел complexType в схеме XML для представления массива double.

WCF намного лучше, чем ASMX.Когда вы используете «Добавить ссылку на службу», вы решаете, как обрабатывать повторяющиеся элементы, такие как ваш массив значений типа double.Вы можете выбрать, чтобы они рассматривались как массив, как List<T> и т. Д.

Было бы отрицательным значением ограничение WCF ограничениями ASMX, который является устаревшей технологией.

0 голосов
/ 15 марта 2012

Вы используете универсальный параметр List <>, который не поддерживается для asmx и wcf из-за взаимодействия с языками, которые не поддерживают универсальные коллекции.См. Также эти вопросы .

В этом вопросе упоминается сгенерированный ArrayOfInt, поэтому имя типа ArrayOf * может быть универсальным решениемиметь дело с родовыми типами.

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