WCF с ws-адресом: создание голых параметров

Я пытаюсь создать службу 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


person webber    schedule 26.06.2012    source источник


Ответы (2)


Я думаю, тебе следует бросить обертку. в .net 2 это будет работать, wcf должен быть похож:

[WebMethod]
[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare)]
public String EchoString(String s, String s1) 
{
    return s;
}
person Yaron Naveh    schedule 27.06.2012

Мне пришлось создать оболочку контрактов сообщений для MyClass и указать тело сообщения.

[MessageContract]
    public class MyWrapper
    {
        [MessageBodyMember]
        public int Value { get; set; }
        [MessageBodyMember]
        public string MyProperty { get; set; }
    }
person webber    schedule 05.07.2012