2010-12-11 3 views
0

지난 주에 비누를 사용하여 여러 행을 반환하는 asmx 웹 서비스를 만들었습니다.WCF - 여러 레코드 반환

이제 WCF로 이동하고 같은 작업을 수행하려고합니다. 내 ASMX 웹 서비스에서

나는 다음과 같은 ..

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는 그리 많은 차이가 있습니다. 당신이 basicHttpBinding를 사용하여 링크를 추가하는 경우

[ServiceContract] 
public interface IGalleryWebService 
{ 

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

또한, (대신 서비스 참조) "웹 참조 추가"- 당신은 ASMX 서비스를 사용하는 경우 당신이하는 것처럼 당신이 같은 결과를 받게됩니다.

+0

O.k, 구현했습니다.하지만 라이브 IIS 웹 서버에 넣을 때 작동하지 않습니다. DataTable을 넣을 때만 가능합니다. 그것에 대한 아이디어가 있습니까? – tmutton

+0

IIS 인증 스키마 'IntegratedWindowsAuthentication, Anonymous'가 지정되었지만 바인딩은 정확히 하나의 인증 스키마 만 지원합니다. 유효한 인증 구성표는 다이제스트, 협상, NTLM, 기본 또는 익명입니다. 단일 인증 체계 만 사용되도록 IIS 설정을 변경하십시오. – tmutton

+0

제어판 -> 관리 도구 -> IIS -> 웹 사이트 또는 응용 프로그램 선택 -> 인증 아이콘을 두 번 클릭 -> 통합 Windows 인증 비활성화 – vorrtex