Именованные и необязательные параметры и WCF - PullRequest
20 голосов
/ 16 апреля 2010

так. .Net 4 добавил именованные и необязательные параметры, которые довольно приятные. Мне не нужно делать столько методов перегрузки в одну строку.

Будет ли это работать над WCF?

Ответы [ 3 ]

31 голосов
/ 16 апреля 2010

WSDL не может описывать необязательные параметры, поэтому ответ «нет».

20 голосов
/ 16 апреля 2010

Так как это семантика компилятора, я бы сказал нет. Однако вы ожидаете, что они будут работать следующим образом.

На стороне Сервисного кода весь код будет принимать параметры по умолчанию.

На стороне клиента я отмечаю, что инструмент «Добавить ссылку на службу» на VS2010 не принимает значения по умолчанию и добавляет их в сгенерированный прокси. Так что вам нужно сгенерировать свой собственный прокси.

Таким образом, клиентский код может использовать значения по умолчанию, если значение по умолчанию указано в реализации контракта на стороне клиента.

Я бы сказал, что то же самое верно для именованных параметров.

В целом, да, но материал не переносится на WCF. Все, что происходит, - это то, что клиентский прокси должен будет отправляться на фабрику каналов как правильный параметр.

0 голосов
/ 29 июня 2018

Я работаю с VS 2017, .Net 4 и проектом WcfService. У меня есть такой сервис:

Интерфейс:

namespace MyServiceNamespace
{
[ServiceContract]
public interface IMyService
{
  [OperationContract]
  [WebGet(ResponseFormat = WebMessageFormat.Json)]
  String GetSomething(int Produkt, DateTime MyDate, char SomeFlag);
}

public class myService : IMyService
{
  public String GetSomething(int Produkt, DateTime MyDate, char SomeFlag)
  {
    if(Produkt==0){Produkt=12345;}
    if(MyDate==DateTime.MinValue){MyDate=DateTime.Today;}
    if(SomeFlag=='\0'){SomeFlag='F';}
    return dosomething();
  }

}
}

я могу назвать это с http://myserver/myservice.svc/GetSomething?Produkt=1&MyDate=2018-01-01&SomeFlag=A

но также http://myserver/myService.svc/GetSomething?Produkt=1&MyDate=2018-01-01

или даже http://myserver/myservice.svc/GetSomething

отсутствующие параметры заполняются пустым значением или значением по умолчанию для типа. Я не знаю, есть ли лучший способ установить собственное значение по умолчанию, потому что

public String GetSomething(int Produkt, DateTime MyDate, char SomeFlag='F')

не работает, все еще SomeFlag == '\ 0'

Что я не выяснил, так это как я могу определить, есть ли значение, потому что этот параметр отсутствовал или был вызван с т. Е. 1.1.0001

Обновление: разметка MyService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="MyServiceNameSpace.MyService" CodeBehind="MyService.svc.cs" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory  %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...