2010-12-11 125 views
0

上週我創建了一個使用soap返回多行的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; } 
    } 
} 

什麼是最好的方式去做和如何做?非常感謝您的幫助!

在此先感謝。

回答

2

WCF有沒有這麼多的不同之處:

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

DataMember屬性沒有默認設置,所以他們是強制性的莫名其妙。

[ServiceContract] 
public interface IGalleryWebService 
{ 

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

此外,如果您使用basicHttpBinding並使用添加鏈接「添加Web引用」(而不是服務引用) - 您將收到相同的結果,如果你使用的asmx服務,你必須。

+0

O.k,我已經實現了,但是當我把它放在我的活的IIS Web服務器上時,它不起作用。這只是當我把DataTable放入時。你有什麼想法嗎? – tmutton 2010-12-11 14:34:53

+0

我得到了錯誤.. IIS指定的身份驗證方案'IntegratedWindowsAuthentication,Anonymous',但綁定僅支持完全確定一個身份驗證方案的規範。有效的認證方案是摘要,協商,NTLM,基本或匿名。更改IIS設置,以便只使用單個身份驗證方案。 – tmutton 2010-12-11 14:51:57

+0

控制面板 - >管理工具 - > IIS - >選擇一個網站或應用程序 - >雙擊Authentificcation圖標 - >禁用集成Windows認證 – vorrtex 2010-12-11 16:10:15