C#:可互操作的Web服务 - 我应该用什么属性标记方法?

时间:2010-12-23 13:25:24

标签: c# wcf web-services

创建使用请求/响应包装器的可互操作WebService所需的正确属性标记是什么?

我已经创建了界面和功能(我将我的服务分为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()],我想知道是否有必要。

2 个答案:

答案 0 :(得分:1)

您必须决定是否需要旧式Web服务(asmx)或WCF。前者使用[WebService]和[WebMethod],后者使用[DataContract],[ServiceContract],[OperationContract]等。它们完全不同。您需要不同的代码和项目类型来将它们作为服务托管。在Visual Studio中创建新的Web服务项目时,您始终可以获得示例代码,但Web也充满了它们。

答案 1 :(得分:0)

没有真正的决定。除非必须,否则永远不要使用旧的[WebService]样式服务。简单。