Определение контракта данных с теми же входными параметрами - PullRequest
1 голос
/ 01 июля 2011

Можно ли определить два контракта на эксплуатацию с одинаковыми параметрами?Я хочу, чтобы одна и та же конечная точка делала разные вещи на почте и получала.Мой код ниже

 [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "MAC/{input}")]
    string MAC(string input);

    [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "MAC/{input}")]
    Datalayer.Datacontracts.WebserviceMessage MAC(string input);

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

с таким же именем? NO.

Возможно использование тех же параметров, которые вы упомянули. Но не с тем же именем.

Услуги следуют документно-ориентированной парадигме; поэтому при проектировании сервисов мы должны избавляться от объектно-ориентированного мышления. Не думайте о полиморфизме, перегрузке или переопределении.

Метаданные службы должны предоставляться в качестве документа даже для не объектно-ориентированных систем / платформ (для поддержки взаимодействия).

0 голосов
/ 01 июля 2011

В дополнение к тому, что сказал SaravananArumugam - ваш код даже не компилируется (вы не можете иметь два метода в одном интерфейсе с одним и тем же именем, единственное отличие которых - тип возвращаемого значения). Однако вы можете изменить имена методов и продолжить работу с тем же UriTemplate - у вас будет «виртуальный» метод с тем же именем (т. Е. Адрес, который использует клиент, будет таким же, как в примере ниже.

Еще одна вещь: вы не должны использовать [WebInvoke (Method = "GET")], вместо этого используйте [WebGet].

public class StackOverflow_6548562
{
    public class WebserviceMessage
    {
        public string Data;
    }

    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "MAC/{input}")]
        string MAC_Get(string input);

        [OperationContract]
        [WebInvoke(Method = "POST",
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "MAC/{input}")]
        WebserviceMessage MAC_Post(string input);
    }

    public class Service : ITest
    {
        public string MAC_Get(string input)
        {
            return input;
        }

        public WebserviceMessage MAC_Post(string input)
        {
            return new WebserviceMessage { Data = input };
        }
    }

    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service/";
        WebServiceHost host = new WebServiceHost(typeof(Service), new Uri(baseAddress));
        host.Open();
        Console.WriteLine("Host opened");

        WebClient c = new WebClient();
        Console.WriteLine(c.DownloadString(baseAddress + "/MAC/fromGET"));
        Console.WriteLine(c.UploadString(baseAddress + "/MAC/frompost", "POST", ""));

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...