【问题标题】:passing xml as a string to webservice causes complete failure将 xml 作为字符串传递给 webservice 会导致完全失败
【发布时间】:2014-04-02 22:26:27
【问题描述】:

我正在托管一个用 c# 编写的 .net 网络服务。在我的一种网络方法中,我期待一些入站参数,所有这些都是字符串。最后的字符串实际上是一个 xml 字符串(我开始为此做一个数据集,但读到这是一个很大的禁忌,所以改用这条路线)。

xml(作为字符串)非常简单。

<FriendsArray><Friend><FriendSocialID>123456789</FriendSocialID><FriendName>Test Test</FriendName><AvatarImage>https://www.imagelocation.com</AvatarImage><FriendGender></FriendGender></Friend></FriendsArray>

&lt;FriendsArray&gt; 是边界,&lt;Friend&gt; 节点重复 n 次。在 web 服务端,我把这个字符串,序列化成 xml 并处理数据。

当 Web 服务在 Visual Studio 中的服务器上本地运行时,它可以完美运行,没有问题。当 web 服务在本地运行并附加到一个测试调用程序时,该程序只是模拟将这些参数(包括 FriendArray)传递给 web 服务,再次,就像下雨一样,没有问题,完美运行。

调用外部 Web 服务的真实世界场景(通过仿真,如 SoapUI 或 XMLSpy,或直接从要调用它的应用程序)它会轰炸服务。不返回错误,或者为空响应对象,完全失败,什么也不返回。

第二次我删除了这个 FriendArray(它在代码隐藏中是可选的),它工作得很好。

以我尝试的方式执行此操作是否存在一些固有问题?如果是这样,是否有一种不需要大量重新编码的简单替代方法?谢谢!

【问题讨论】:

  • 它是一种什么样的网络服务? ASMX?
  • 是的,它是一个非常简单的 .asmx 网络服务
  • XML 没有任何问题。你处理它的方式一定有问题。你能在你的服务中展示一些代码吗?
  • ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum

标签: c# .net xml web-services asmx


【解决方案1】:

显然“”在 XML 中是保留的。没有意识到这一点。我所要做的就是在字符串中使用&amp;lt;&amp;gt; 转义它们,现在它可以完美运行了。

【讨论】:

  • 解析器如何才能知道标签的开始和结束位置?很好地调试你自己的代码。
  • @Oren 有时最简单的解决方案是最难得到的。它直直地盯着我的脸,我什至没有意识到。
  • 是的,这种情况经常发生。希望我的评论不是刻薄的——只是想指出保留这些字符对于解析器能够发挥其魔力是必要的。
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2021-10-24
  • 2015-05-17
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多