2010-12-23 6 views
0

요청/응답 래퍼를 사용하는 상호 운용 가능한 WebService를 만드는 데 필요한 올바른 Attribute 태그는 무엇입니까?C# : 상호 운용 가능한 웹 서비스 -이 속성에 어떤 속성을 추가해야합니까?

나는 인터페이스와 이미 기능을 만들어 (그리고 나는 3 개 부분 (Client.dll, Shared.dll, SERVER.DLL)로 내 서비스를 분할 :

SERVER.DLL :

public sealed class CalcServer : ICalculator 
{ 
    public AddResponse Add(AddRequest request) 
    { 
     return new AddResponse(request.Value1 + request.Value2); 
    } 
} 

Shared.dll :

public interface ICalculator 
{ 
    AddResponse Add(AddRequest request); 
} 

public sealed class AddResponse 
{ 
    public int Value { get; private set; } 

    public AddResponse() 
    { 
     Init(); 
    } 
    public AddResponse(int value) 
    { 
     Init(value); 
    } 
    private void Init(int value = 0) 
    { 
     Value = value; 
    } 
} 

public sealed class AddRequest 
{ 
    public int Value1 { get; private set; } 
    public int Value2 { get; private set; } 

    public AddResponse() 
    { 
     Init(); 
    } 
    public AddResponse(int value1 = 0, int value2 = 0) 
    { 
     Init(value1, value2); 
    } 
    private void Init(int value1 = 0, int value2 = 0) 
    { 
     Value1 = value1; 
     Value2 = value2; 
    } 
} 

Client.dll :

public interface CalcChannel : ICalculator, IClientChannel 
{ 
} 

public sealed class CalcClient : ClientBase<ICalculator>, ICalculator 
{ 
    public CalcClient(String endpointConfigurationName) : 
     base(endpointConfigurationName) 
    { 
    } 

    pubic int DoAdd(int val1, int val2) 
    { 
     AddRequest request = new AddRequest(val1, val2); 
     AddResponse response = ((ICalculatr)this).Add(request); 

     return response.Value; 
    } 

    AddResponse ICalculator.Add(AddRequest request) 
    { 
     return Channel.Add(request); 
    } 
} 

내가 필요한 속성 태그 상호 운용 가능한 웹 서비스로이를 유지하기 위해 무엇 다만 확실하지 않다. 나는 그것을 구글에서 찾았지만, 다른 소스는 다른 태그를 사용하는 것으로 보인다. 일부는 [ServiceContract()]을 사용하고 일부는 [WebService()]을 사용합니다. 그 위에는 [ServiceBehavior()]과 같은 서버 측 태그가 있으며 필요한지 아닌지 궁금합니다.

답변

1

이전 스타일의 웹 서비스 (asmx) 또는 WCF를 원할지 결정해야합니다. 전자는 [WebService]와 [WebMethod]를 사용하고 후자는 [DataContract], [ServiceContract], [OperationContract] 등을 사용합니다. 이들은 완전히 다릅니다. 그들을 서비스로 호스트하려면 다른 코드와 프로젝트 유형이 필요합니다. Visual Studio에서 새로운 웹 서비스 프로젝트를 만들면 항상 샘플 코드를 얻을 수 있지만 웹에 가득 차 있습니다.

+0

XmlSerialization이 필요하지 않습니다. ServiceContract를 Service 클래스에, OperationContract를 메서드에, DataContract를 해당 작업에 사용하는 모든 복합 유형에, DataMember를 웹 서비스 인터페이스를 통해 볼 수있는 데이터 계약의 모든 속성에 배치합니다. 또한 이러한 서비스를 호스팅해야합니다. 가장 간단한 방법은 Visual Studio에서 새로운 WCF 응용 프로그램을 만드는 것입니다. 손으로 직접 수행하는 것은 쉽지 않습니다. – fejesjoco

0

실제로 결정이 없습니다. 꼭 필요한 경우가 아니면 이전 [WebService] 스타일 서비스를 사용하지 마십시오. 단순한.

관련 문제