控制 WCF 响应格式和命名空间 [英] Controlling WCF response format and namespaces

查看:23
本文介绍了控制 WCF 响应格式和命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望我的 WCF 响应具有一个包含两个命名空间的响应元素,使用 DataContracts,但我无法让它工作.这就是我希望得到的回应:

I want my WCF response to have a response element with two namespaces using DataContracts, but I can't get it to work. This is what I would like the response to be:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <s:Header />
  <s:Body>
    <ns2:TestReply xmlns="http://www.test.org/test/2007/00" xmlns:ns2="http://www.test2.org/test2/types">
      <ns2:Result>
        <ns2:ActionSuccessful>true</ns2:ActionSuccessful>
      </ns2:Result>
      <ns2:ResultData>
        <ns2:Name>Maikel Willemse</ns2:Name>
      </ns2:ResultData>
    </ns2:TestReply>
  </s:Body>
</s:Envelope>

这是我得到的响应(使用 WCF 测试客户端进行测试时):

This is the response I get (when testing with the WCF Test Client):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body>
    <GetDataResponse xmlns="http://www.test.org/test/2007/00">
      <TestReply xmlns:a="http://www.test2.org/test2/types" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Result>
          <a:ActionSuccessful>true</a:ActionSuccessful>
        </a:Result>
        <a:ResultData>
          <a:Name>Maikel Willemse</a:Name>
        </a:ResultData>
      </TestReply>
    </GetDataResponse>
  </s:Body>
</s:Envelope>

我的服务界面是这样的:

My service interface looks like this:

[ServiceContract(Namespace = "http://www.test.org/test/2007/00")]
public interface IService1
{
    [OperationContract]
    [return: MessageParameter(Name = "TestReply")]
    GetDataResponse GetData(string name);
}

服务类:

public class Service1 : IService1
{
    public GetDataResponse GetData(string name)
    {
        return new GetDataResponse
            {
                Result = new Result {ActionSuccessful = true},
                ResultData = new ResultData {Name = name}
            };
    }
}

DataContract 类是:

And the DataContract classes are:

[DataContract(Namespace = "http://www.test2.org/test2/types")]
public class GetDataResponse
{
    [DataMember(Name = "Result")]
    public Result Result { get; set; }

    [DataMember(Name = "ResultData")]
    public ResultData ResultData { get; set; }
}

[DataContract(Namespace = "http://www.test2.org/test2/types")]
public class Result
{
    [DataMember(Name = "ActionSuccessful")]
    public bool ActionSuccessful { get; set; }
}

[DataContract(Namespace = "http://www.test2.org/test2/types")]
public class ResultData
{
    [DataMember(Name = "Name")]
    public string Name { get; set; }
}

我的 WCF 项目的目标框架是 .NET 4.命名空间前缀不必相同.如何获得所需格式的响应?

The target framework of my WCF project is .NET 4. The namespace prefixes do not have to be the same. How can I get the response in the format I want?

推荐答案

致@MaikelTestReply 位于默认命名空间中,因此没有前缀,但里面的元素确实有.

To @Maikel The TestReply is in the default namespace so there is no prefix, but the elements inside do have it.

xmlns:a="http://www.test2.org/test2/types

所以这个命名空间的前缀是 a.(因为 'a=')并且它与默认命名空间不同.

so the prefix for this namespace is a. (because of 'a=') and it is different from the default namespace.

在你的方法的 ServiceContractAttribute 中

In the ServiceContractAttribute of your method

GetDataResponse GetData(string name); 

按照@Carlos 的建议,你可以写

as @Carlos suggested, you can write

[ServiceContract(Namespace="http://www.test2.org/test2/types")]

你不能拥有这个

<a:TestReply xmnls:a="http://www.test2.org/test2/types">

这篇关于控制 WCF 响应格式和命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆