Я пытаюсь создать службу WCF SOAP, у которой есть метод службы, который принимает голые параметры в теле, но я просто не могу это сделать. На данный момент под телом создается элемент имени метода. Я пытаюсь использовать ws-адресацию, чтобы имя метода было частью заголовка, а параметры были прямыми дочерними элементами тела.
Вот моя реализация сервиса:
[SoapDocumentService(Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]
public class Service1 : IService1
{
[SoapDocumentMethod(Use=SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]
public void DoWork([XmlElement(Namespace = "http://www.contoso.com",
IsNullable = true)] MyClass wrapper)
{
}
}
[XmlRoot(Namespace = "http://www.contoso.com")]
public class MyClass
{
public int Value { get; set; }
public string MyProperty { get; set; }
}
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoWork(MyClass wrapper);
}
Вышеупомянутая реализация генерирует клиент мыла ниже. Но я пытаюсь сделать элемент-оболочку прямым дочерним элементом тела (пытаясь удалить DoWork). Из того, что я прочитал, украшение метода svc для использования голых параметров должно удалить имя метода службы (DoWork) и использовать ws-адресацию.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:web="http://schemas.datacontract.org/2004/07/WebApplication2">
<soap:Header/>
<soap:Body>
<tem:DoWork> <!-- I want to remove this svc method name element -- >
<tem:wrapper> <!-- I want this to be under the body -->
<!--Optional:-->
<web:MyProperty>?</web:MyProperty>
<!--Optional:-->
<web:Value>?</web:Value>
</tem:wrapper>
</tem:DoWork>
</soap:Body>
</soap:Envelope>
Я следовал руководству от msdn, чтобы украсить метод службы. Ссылка на MSDN