2012-06-26 45 views
0

我正在嘗試創建一個WCF SOAP服務,該服務具有一個服務方法,該方法接受正文中的裸露參數,但是我不能讓它發生。目前,方法名稱元素正在正文下創建。我正在嘗試使用ws-addressing,以使方法名稱成爲頭部的一部分,參數是身體的直接子節點。帶ws地址的WCF:創建裸露參數

這裏是我的服務實現:

[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); 
} 

上述實施產生下面的SOAP客戶端。但我試圖將包裝元素作爲正文上的直接子元素(試圖刪除DoWork)。從我讀過的內容來看,裝飾svc方法以使用裸參數應該刪除服務方法名稱(DoWork)並使用ws-addressing。

<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 Link

回答

0

我想你應該放棄包裝。在.NET 2這樣的工作,WCF應該是相似的:

[WebMethod] 
[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare)] 
public String EchoString(String s, String s1) 
{ 
    return s; 
} 
0

我不得不創建了MyClass的消息收縮包裝,並指定郵件正文中。

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