У меня есть WebServiceHost, который используется для размещения некоторых веб-служб в консольном приложении.Я добавил ссылку на службу в своем клиентском приложении и создал прокси-сервер следующим образом:
var binding = new WebHttpBinding();
var endPoint = new EndpointAddress(string.Format(Settings.serviceBase, Settings.wcfPort));
ChannelFactory<IzWaveSVC> factory = new ChannelFactory<IzWaveSVC>(new WebHttpBinding(), endPoint);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
// **Exception occurs here**
var proxy = (IzWaveSVC)factory.CreateChannel();
Это работает, но как только я добавил новый метод, требующий более одного параметра, я начал получать это исключение, когдапрокси был создан (это было еще до того, как произошла какая-либо связь):
Operation 'setDeviceState' of contract 'IzWaveSVC' specifies multiple request
body parameters to be serialized without any wrapper elements. At most one
body parameter can be serialized without wrapper elements. Either remove the
extra body parameters or set the BodyStyle property on the WebGetAttribute /
WebInvokeAttribute to Wrapped.
Добавление атрибута WebInvokeAttribute и установка BodyStyle в обертке не имеет никакого эффекта:
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
bool setDeviceState(byte nodeId, bool powered, byte level);
Следует отметитьчто у меня есть другие методы, которые работают, но у них есть только один параметр, поэтому у них нет вышеуказанной проблемы.
Просто к сведению, вот как я настраиваю хост:
endPoint = new EndpointAddress(string.Format(Settings.serviceBase, port));
binding = new WebHttpBinding();
host = new WebServiceHost(singletonObject, new Uri(string.Format(Settings.serviceBase, port)));
host.AddServiceEndpoint(typeof(IzWaveSVC), binding, "");
ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior();
mexBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(mexBehavior);
host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), endPoint.Uri.AbsoluteUri + "mex");
host.Open();
Любая помощь приветствуется.
Спасибо!