发送到WCF服务时,在Soap信封中使用json正文

时间:2010-09-21 11:59:39

标签: wcf json soap httprequest

我需要使用json body与autentication的soap标头进行交互。

我创建了这样的合同:

[ServiceContract(Namespace = "http://tourico.com/webservices/hotelv3")]
public interface IHotelMobileFlow
{
    [OperationContract, WebInvoke(
       BodyStyle = WebMessageBodyStyle.Wrapped,
       RequestFormat = WebMessageFormat.Json,
       ResponseFormat = WebMessageFormat.Json)]
    SearchResultMobile SearchHotels(SearchRequestMobile request);

这样的服务:

[AuthenticationRequired(typeof(HotelFlow), typeof(DefaultClientAuthenticationHandler))]
public class HotelMobileFlow : IHotelMobileFlow
{

属性'AuthenticationRequired'我需要发送一个soap标题

<soapenv:Header>
      <aut:AuthenticationHeader>
         <aut:LoginName>host</aut:LoginName>
         <aut:Password>password</aut:Password>
         <aut:Culture>en_US</aut:Culture>
         <aut:Version>8</aut:Version>
      </aut:AuthenticationHeader>
   </soapenv:Header>

我创建了这样的请求:

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";

SearchRequestMobile sr = new SearchRequestMobile();

是否可以将soap标头添加到json请求中? 还有其他选项如何将标头转移到服务?

谢谢,Michal

1 个答案:

答案 0 :(得分:1)

不可以将SOAP标头添加到JSON请求中。服务将无法解析它。您的Web请求定义您要发送JSON。这意味着请求的内容只能是JSON。

理论上,如果您实现自己的消息编码器,您将能够在SOAP主体中发送JSON内容并添加SOAP头,但这种开发的复杂性并不值得。

您必须提供其他方式来验证您的客户端。改为使用自定义HTTP标头。