我正在嘗試創建一個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