2011-09-15 13 views
0

リクエストを送信するときに名前/名前空間/その他の属性が表示される場所がありましたが、現在は消えてしまいました。 WebApiプロジェクトを利用しようとしましたが、ドキュメンテーションは限られています。レスポンスでDataContract属性が送信されない

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:私はIOCコンテナ(このようなものにちょっと新しい) としてlightcoreを使用しています

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; } } 
    } 
} 

注意が当初のポストのつもりでしたhttp://blog.alexonasp.net/post/2011/04/15/Microsoft-Web-API-e28093-the-REST-is-done-by-WCF-(Part-1).aspx しかし、一度私は彼が戻ってPOSTからHttpResponseMessage<Contact>を返す6部になった、それはすべて崩壊し始めた。 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 } 
    ); 
} 

.... 

[OK]を、私が失敗したことを思われるものつまり、名前/名前空間情報がサーバーにシリアル化され、クライアントにはシリアル化されないということです。

答えて

0

...私は、サーバー上で、私は情報を追加していなかったデフォルトのWEBAPIのシリアル化を使用している間、名前/名前空間の情報を追加して、クライアント上でDataContractSerializerを使用していました。これを見て時間をかけた人に感謝します。

0

ルーティングテーブルレコードを追加しましたか?この上で答えを更新しました

RouteTable.Routes.MapServiceRoute<WebServiceResources>("GetNameValueTest"); 
+0

あなたのリクエストにより質問を更新しました – overbay

関連する問題