我正在尝试创建一个WCF SOAP服务,它有一个服务方法接受正文中的裸参数,但我不能让它发生。目前,正在正文下创建方法名称元素。我正在尝试使用ws-addressing,以便方法名称是标题的一部分,参数是正文的直接子项。
这是我的服务实施:
[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 :(得分:0)
我认为你应该放弃包装。在.net 2中这可行,wcf应该类似:
[WebMethod]
[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare)]
public String EchoString(String s, String s1)
{
return s;
}
答案 1 :(得分:0)
我必须为MyClass创建消息合同包装器并指定消息体。
[MessageContract]
public class MyWrapper
{
[MessageBodyMember]
public int Value { get; set; }
[MessageBodyMember]
public string MyProperty { get; set; }
}