2010-12-23 52 views
0

創建使用請求/響應包裝器的可互操作的WebService所需的正確屬性標記是什麼?C#:可互操作的WebServices - 我應該用哪些屬性標記方法?

我創建的接口和功能已經(和我我的服務分成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); 
    } 
} 

我只是不知道什麼是必要的屬性標記,以保持這是一個可互操作的Web服務。我已經在谷歌上查找它,但似乎不同的來源使用不同的標籤。一些使用[ServiceContract()],一些使用[WebService()]。最重要的是有服務器端標籤,如[ServiceBehavior()],我想知道這是否有必要。

回答

1

您必須決定是否要舊式Web服務(asmx)或WCF。前者使用[WebService]和[WebMethod],後者使用[DataContract],[ServiceContract],[OperationContract]等,它們完全不同。您需要不同的代碼和項目類型才能將它們作爲服務託管。在Visual Studio中創建新的Web服務項目時,您始終可以獲得示例代碼,但Web也充滿了它們。

+0

XmlSerialization不是必需的。您將ServiceContract放在服務類上,OperationContract放在其方法上,DataContract放在您在這些操作中使用的所有複雜類型上,DataMember放置在您希望通過webservice界面可見的數據協定的所有屬性上。您還需要託管這些服務,最簡單的方法是在Visual Studio中創建新的WCF應用程序,手動完成這件事並不容易。 – fejesjoco 2010-12-23 13:51:32

0

沒有真正的決定。除非必須,否則千萬不要使用舊的[WebService]風格的服務。簡單。

相關問題