2010-12-11 10 views
0

先週私は石鹸を使用して複数の行を返すasmx Webサービスを作成しました。WCF - 複数のレコードを返します

私は今WCFに移動し、同じことをしたいと思います。私は次のことをやっている私のASMX Webサービスで

..

public class sample 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string NameOfFile { get; set; } 
    //public int Distance { get; set; } 
} 

[WebMethod] 
public sample[] Test(int count, float lat, float lng) 
{ 
    DataTable dt = new Gallery().DisplayNearestByLatLong(count, lat, lng); 
    var samples = new List<sample>(); 

    foreach (DataRow item in dt.Rows) 
    { 
     var s = new sample(); 
     s.Id = item[0].ToString(); 
     s.Name = item[1].ToString(); 
     s.NameOfFile = item[2].ToString(); 
     //s.Distance = (int)item[3]; 

     samples.Add(s); 
    } 
    return samples.ToArray(); 
} 

このコードは素晴らしい作品が、今、私は同じですが、WCFを使用してやりたいです。

私の現在のWCFファイルが(私はチュートリアルをコピーしますが、セットアップ、私は必要だと思うデータコントラクトを(持っている?))このようになり

GalleryWebService.cs 
public class GalleryWebService : IGalleryWebService 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 

    public CompositeType GetDataUsingDataContract(CompositeType composite) 
    { 
     return composite; 
    } 

    public CompositeType GetTestData() 
    { 
     return new CompositeType(); 
    } 
} 

IGalleryWebService.cs

[ServiceContract] 
public interface IGalleryWebService 
{ 
    [OperationContract] 
    string GetData(int value); 

    [OperationContract] 
    CompositeType GetDataUsingDataContract(CompositeType composite); 

    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      UriTemplate = "test/random")] 
    CompositeType GetTestData(); 
} 

[DataContract] 
public class CompositeType 
{ 
    [DataMember] 
    string _id; 
    public string Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 

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

    [DataMember] 
    string _nameoffile = "Hello"; 
    public string NameOfFile 
    { 
     get { return _nameoffile; } 
     set { _nameoffile = value; } 
    } 
} 

それをやり遂げる最善の方法は何ですか?あなたの助けが大変ありがとう!

ありがとうございます。

[DataContract] 
public class sample 
{ 
    [DataMember] 
    public string Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public string NameOfFile { get; set; } 
} 

DataMember属性がデフォルトで設定されていないので、彼らは何とか義務です:

答えて

2

WCFはないので、多くの違いがあります。

また
[ServiceContract] 
public interface IGalleryWebService 
{ 

    [OperationContract] 
    sample[] Test(int count, float lat, float lng); 
} 

、あなたがbasicHttpBindingを使用し、(代わりにサービス参照の)「Web参照の追加」を使用してリンクを追加した場合 - あなたはASMXサービスを使用した場合、あなたが持っているのと同じ結果を受信します。

+0

O.k、私はそれを実装しましたが、私はそれを私のライブIIS Webサーバーに置くと動作しません。これは、私がDataTableを入れたときだけです。それについてのアイデアはありますか? – tmutton

+0

私はエラーを取得しています。IISは認証スキーム「IntegratedWindowsAuthentication、Anonymous」を指定しましたが、バインディングはちょうど1つの認証スキームの仕様しかサポートしていません。有効な認証方式は、ダイジェスト、ネゴシエート、NTLM、基本、または匿名です。単一の認証方式のみが使用されるようにIIS設定を変更します。 – tmutton

+0

コントロールパネル - >管理ツール - > IIS - > Webサイトまたはアプリケーションを選択 - >認証アイコンをダブルクリック - >統合Windows認証を無効にする – vorrtex

関連する問題