【问题标题】:If a wsdl is not correct and my generated web reference fails doing deserialization, what options do I have?如果 wsdl 不正确并且我生成的 Web 引用在反序列化时失败,我有什么选择?
【发布时间】:2014-09-04 19:03:58
【问题描述】:

使用提琴手我可以看到我的网络服务调用确实得到了正确数据的响应。

问题是,我的响应对象为空,即 Web 引用进行调用并取回数据,但实际的反序列化过程失败。

我搜索了一下,可能是 wsdl 由于某种原因没有映射到返回的响应。

如果我无法修改 wsdl,我有什么选择?

更新

I am making the call like this:

var serviceTest = new SecretService.GetUserProfile();

SecretService.ASADataset response = serviceTest.GetUserProfile("123");

// response is null

监控提琴手时,我可以看到请求和响应。响应包含我需要的所有数据,但我猜测格式与 VS.NET 生成的不匹配。

【问题讨论】:

  • 您能否展示您是如何使用和/或创建网络参考实例的?你也可以在本地调试它并进入代码..?
  • @DJKRAZE 我已经用代码更新了我的问题。是的,我可以在本地调试它,但我无法进入进行调用的代码,我试过了,但它没有进入源代码。
  • 好的,让我问你这个你能不能通过测试调用来调用它,当你运行它时,当你导航到基于本地的 URL 时,它可以工作并且需要显示更多代码,比如你如何使用和或引用 Response 你可以使用对象 Browser 来查看 GetUserProfile 是否存在以及它的 Param 类型到底是什么......?
  • @publicstatic 你能手动反序列化来自 fiddler 的响应数据吗?
  • @win 我该怎么做?

标签: c# asp.net web-services soap


【解决方案1】:

OP 询问如何将 xml (from fiddler) 反序列化为对象。

public object DeserializeObject(string xml, Type type)
{
   var xs = new XmlSerializer(type);
   var stringReader = new StringReader(xml);
   var obj = xs.Deserialize(stringReader);
   stringReader.Close();
   return obj;
}

// Usage
var serializer = new Serializer();
var response = (Response)serializer.DeserializeObject(
    responseXml, typeof(Response));

最坏的情况是您可以手动发布到 URL 并像这样获取响应 xml -

Uri uri = new Uri(PostUrl);
var responseXml = client.UploadString(uri, requestXml);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多