开发者

C#: Interoperable WebServices - What attribute should I tag the methods with?

开发者 https://www.devze.com 2023-02-01 12:07 出处:网络
What are the correct Attribute tags necessary to create an interoperable WebService that uses Request/Response wrappers?

What are the correct Attribute tags necessary to create an interoperable WebService that uses Request/Response wrappers?

I created the interface and functions already (and I split up my service into 3 parts (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);
    }
}

I'm just not sure what the necessary attribute tags are to keep this as an interoperable web service. I've looked it up on google, but it seems that different sources use di开发者_如何学Pythonfferent tags. Some use [ServiceContract()] and some use [WebService()]. On top of that there are server-side tags such as [ServiceBehavior()] and I wonder if that's necessary or not.


You have to decide if you want older style webservices (asmx) or WCF. The former uses [WebService] and [WebMethod], the latter uses [DataContract], [ServiceContract], [OperationContract] etc. They are completely different. You need different code and project types to host them as a service. When you create new web service projects in Visual Studio, you always get sample codes, but the web is full of them, too.


There isn't really a decision. Never use the old [WebService] style services unless you have to. Simple.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号