Атрибуты DataContract не отправляются в ответах - PullRequest
0 голосов
/ 16 сентября 2011

У меня было такое, где атрибуты name / namespace / other обнаруживаются при отправке запроса, но теперь они исчезли и не могут выяснить на всю жизнь, что изменилось ... документация кажется ограниченной.

WebServiceResource.cs:

using System;
using System.Collections.Generic;

using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Web;
using wsDAL.EDataTypes;
using System.Data;
using System.IO;
using System.Text;
using System.Net.Http;

namespace wsDAL
{
    [ServiceContract]
    public class WebServiceResources
    {
        [WebGet(UriTemplate = "/GetNameValueTest/{name}/{value}")]
        public NameValue GetNameValueTest(string name, string value)
        {
            NameValue nv = new NameValue("WS_" + name + "_WS", "WS_" + value + "_WS");  
            return nv;
        }
    }
}

GeneralResources.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;
using System.Data;

namespace wsDAL.EDataTypes
{
    [DataContract(Name = "NameValueContract", Namespace = "http://fred.NameValue.com")]
    public class NameValue
    {
        private string _name;
        private string _value;

        public NameValue()
        {
            _name = null;
            _value = null;
        }

        public NameValue(string Name, string Value)
        {
            _name = Name;
            _value = Value;
        }

        [DataMember(Name = "NameMember")]
        public string Name { get { return _name; } set { _name = value; } }

        [DataMember(Name = "ValueMember")]
        public string Value { get { return _value; } set { _value = value; } }
    }
}

Примечание. Я использую lightcore в качестве контейнера IOC (вроде как новичок в этом) Изначально собирался пост на http://blog.alexonasp.net/post/2011/04/15/Microsoft-Web-API-e28093-the-REST-is-done-by-WCF-(Part-1).aspx но как только я добрался до шестой части, где он возвращает HttpResponseMessage<Contact> из POST, все начало разваливаться. клиент искал пространство имен при возврате xml, но это не было частью сериализованного ответа ...

Global.asax.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using LightCore;
using Microsoft.ApplicationServer.Http.Description;
using Microsoft.ApplicationServer.Http.Activation;

....

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    ContainerBuilder builder = new ContainerBuilder();
    builder.Register<IResourceFactory, LightCoreResourceFactory>();

    IContainer container = builder.Build();
    var configuration = HttpHostConfiguration.Create().SetResourceFactory((serviceType, instanceContext, request) => container.Resolve(serviceType), null);

    RouteTable.Routes.MapServiceRoute<WebServiceResources>("ws", configuration);

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    );
}

....

Хорошо, мне кажется, что я не смог понять, что информация об имени / пространстве имен сериализуется на сервер, а не на клиент.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

Обновленный ответ на это ... Я использовал DataContractSerializer на клиенте, который добавлял информацию об имени / пространстве имен, в то время как на сервере я использовал сериализацию WebApi по умолчанию, которая не добавляла информацию.Спасибо всем, кто нашел время, чтобы разобраться в этом.

0 голосов
/ 16 сентября 2011

Вы добавили запись таблицы маршрутизации?

RouteTable.Routes.MapServiceRoute<WebServiceResources>("GetNameValueTest");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...