我使用提供了以下调用和响应的第三方网络服务
http://api.athirdparty.com/rest/foo?apikey=1234
<response>
<foo>this is a foo</foo>
</response>
和
http://api.athirdparty.com/rest/bar?apikey=1234
<response>
<bar>this is a bar</bar>
</response>
这是合同和支持类型我写的
[ServiceContract]
[XmlSerializerFormat]
public interface IFooBarService
{
[OperationContract]
[WebGet(
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "foo?key={apikey}")]
FooResponse GetFoo(string apikey);
[OperationContract]
[WebGet(
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "bar?key={apikey}")]
BarResponse GetBar(string apikey);
}
[XmlRoot("response")]
public class FooResponse
{
[XmlElement("foo")]
public string Foo { get; set; }
}
[XmlRoot("response")]
public class BarResponse
{
[XmlElement("bar")]
public string Bar { get; set; }
}
然后我的客户是这样的
static void Main(string[] args)
{
using (WebChannelFactory<IFooBarService> cf = new WebChannelFactory<IFooBarService>("thirdparty"))
{
var channel = cf.CreateChannel();
FooResponse result = channel.GetFoo("1234");
}
}
当我运行此我得到下面的异常
无法反序列化XML主体与根名称“响应”,并根名称空间“”(操作“的getFoo”和合同(“IFooBarService”,“ http://tempuri.org/使用的XmlSerializer”))。 确保对应于XML类型被添加到服务的已知类型的集合。
如果我注释掉GetBar
从操作IFooBarService
,它工作正常。 我知道我在这里失去了一个重要的概念 - 只是不知道看起来相当的东西。 什么是构建我的合同类型的正确方法,使他们能够正确地反序列化?