2010-06-16 4 views
0

현재 웹 서비스의 속성에 사용자 지정 "열 이름"을 추가하려고합니다. 여기 수업이 있습니다.웹 서비스에서 사용자 지정 특성을 사용하는 방법은 무엇입니까?

public class OrderCost 
{ 
    public int OrderNum { get; set; } 
    public int OrderLine { get; set; }  
    public int OrderRel { get; set; } 
    public DateTime OrderDate { get; set; } 
    public string PartNum { get; set; } 
    public string Description { get; set; } 
    public decimal Qty { get; set; } 
    public string SalesUM { get; set; } 
    public decimal Cost { get; set; } 
    public decimal Price { get; set; } 
    public decimal Net { get; set; } 
    public decimal Margin { get; set; } 
    public string EntryPerson { get; set; } 
    public string CustID { get; set; } 
    public string Customer { get; set; } 
} 

기본적으로 나는 모든 속성을 반복하고 각 속성에 대한 열을 만드는 또 다른 클래스를 Silverlight 측에 가지고 있습니다. 것은, 나는 재산의 이름 이외의 다른 이름을 사용하고 싶다. 예를 들어 OrderNum 대신 "Order Number"를 표시하려고합니다. 사용자 지정 특성을 사용하려고 시도했지만 작동하지 않는 것 같습니다. 속성을 사용하여 웹 서비스에서 이러한 속성에 다른 이름을 제공 할 수있는 방법이 있습니까? 내가하려는 일을 성취 할 수있는 또 다른 방법이 있습니까?

답변

0

아니요, .NET과 관련된 속성이나 기타 기능은 클라이언트와 서비스간에 사용할 수 없습니다. 이유를 배우려면 "Basics: How Web Services Work"을 참조하십시오.

0

클라이언트 응용 프로그램을 업데이트 할 필요없이 서버에서이 메타 데이터를 제어하는 ​​방법을 찾고 있다면 속성이 해결책이라고 생각하지 않습니다. 우선, 속성은 컴파일 타임에 정의되며, 그렇게 할 능력이 있다고하더라도 런타임에 속성을 조작해야한다고 생각하지는 않습니다. 그러나 또 다른 문제점은 웹 서비스가 닷넷 속성에 해당하는 기본 메커니즘을 갖고 있지 않기 때문에 이러한 속성이 나타내는 메타 데이터를 전달하는 기본 제공 방법이 없다는 것입니다.

이 메타 데이터를 특성을 통해 정의하려면 웹 서비스 및 클라이언트 응용 프로그램 모두에서 사용할 수 있도록 별도의 공유 어셈블리에 OrderCost 클래스를 넣을 수 있습니다. 단점은 속성에서 정의한 값을 변경하려는 경우 클라이언트 응용 프로그램은 업데이트 된 DLL을 얻을 때까지 이러한 변경 사항을 볼 수 없다는 것입니다.

또는 클라이언트 응용 프로그램에서 메타 데이터의 변경 사항을 완전히 모르는 경우 원하는 디스플레이 정보가 포함 된 일종의 Display 클래스를 만드는 것이 좋습니다. 결과.

예를 들어 아래 코드는 하나의 "표시"개체와 "데이터"개체의 목록을 포함하는 MyResultObject라는 클래스를 보여줍니다. 물론, 네임 스페이스, 클래스 이름, 그 클래스의 조직은 당신에게 달려 :

namespace MyApplication 
{ 
    public class MyResultObject 
    { 
     public Display.OrderCost Display { get; set; } 

     public IList<Data.OrderCost> Data { get; set; } 
    } 
} 

namespace MyApplication.Display 
{ 
    public class Column 
    { 
     public string HeaderText { get; set; } 
     public bool Visible { get; set; } 
    } 

    public class OrderCost 
    { 
     public Column OrderNum { get; set; } 
     public Column OrderLine { get; set; } 
     public Column OrderRel { get; set; } 
     public Column OrderDate { get; set; } 
     public Column PartNum { get; set; } 
     public Column Description { get; set; } 
     public Column Qty { get; set; } 
     public Column SalesUM { get; set; } 
     public Column Cost { get; set; } 
     public Column Price { get; set; } 
     public Column Net { get; set; } 
     public Column Margin { get; set; } 
     public Column EntryPerson { get; set; } 
     public Column CustID { get; set; } 
     public Column Customer { get; set; } 
    } 
} 

namespace MyApplication.Data 
{ 
    public class OrderCost 
    { 
     public int OrderNum { get; set; } 
     public int OrderLine { get; set; } 
     public int OrderRel { get; set; } 
     public DateTime OrderDate { get; set; } 
     public string PartNum { get; set; } 
     public string Description { get; set; } 
     public decimal Qty { get; set; } 
     public string SalesUM { get; set; } 
     public decimal Cost { get; set; } 
     public decimal Price { get; set; } 
     public decimal Net { get; set; } 
     public decimal Margin { get; set; } 
     public string EntryPerson { get; set; } 
     public string CustID { get; set; } 
     public string Customer { get; set; } 
    } 
} 

나는 그것의 데이터가 될 것입니다 방법에 대한 지식을 가지고 서비스에 대한 의미가 있다면 당신은하지만, 자신에게 물어해야한다고 생각 표시됩니다. 반대로, 클라이언트가 이해하지 못하는 데이터를 소비하는 것은 이해가 되나, 데이터를 올바르게 처리하기 위해서는 메타 데이터가 필요합니다. 어떤 경우에는 정확히 원하는대로 할 수 있지만, 일반적인 경우에는 그렇지 않을 수도 있습니다. 어쨌든 응용 프로그램에 올바른 접근 방식은 사용자에게 달려 있습니다.

+0

WCF와 마찬가지로 ASMX 웹 서비스에서 유형을 공유 할 수 없습니다. –

+0

나는 내 대답에 더 분명 했어야했다. WSDL에서 코드를 생성하는 것보다는이 어셈블리의 클래스를 사용하도록 웹 서비스 프록시를 특별히 코딩해야하지만 클라이언트와 서버 모두에서 공통적 인 어셈블리를 사용한다는 점을 염두에 두었습니다. 나는 이것이 가능할 것이라고 생각하지만, 단지 WSDL 이상의 클라이언트와 서버 간의 더 많은 결합을 필요로 할 것이며 제 생각에는 이상적인 해결책이 아닙니다. –

관련 문제