【问题标题】:How to create a JSON variable from a SOAP Response?如何从 SOAP 响应创建 JSON 变量?
【发布时间】:2014-02-12 01:13:20
【问题描述】:

我使用的是 ASP.NET 4.0,需要在页面上的 javascript 中返回一个 SOAP (XML) 响应到一个 JSON 变量。我希望能够像使用任何 JSON 变量一样调用该变量及其属性。 Soap Web Service (.asmx) 文件不在我需要构建客户端(接收请求并将其放入 JSON 变量)的服务器上。此外,为了使这更复杂,发送到 Web 服务的 XML 请求需要发送用户名和密码才能返回项目。

Web 服务的 URL 在这里:http://ws.idssasp.com/members.asmx?wsdl

我想我会创建一个 Visual Studio Web 应用程序项目 (C#),我能够做到并很好地连接到 Web 服务,但是,这需要在 javascript 用来输出来的项目的页面上从网络服务的方法。因此,.aspx 文件在这种情况下不起作用,因为它只需要在标签内的 JSON 变量中输出 Web 服务响应的结果(可能在页面的头部,但对我来说并不重要)在哪里)。或者它可以动态创建一个 .JS 文件(这可能会更好,因为如果我的服务器上存在 js 文件,它将被缓存并且不需要多次调用 Web 服务)。但是,我不确定在 Visual Studio 中构建什么来实现这一点?而且我不确定如何将其输出到页面上。我想 JSON 变量也可以存储在服务器上的 Members.json 文件中,并且可以调用它来加载所需的 json。

在向另一台服务器发送请求后,如何从 SOAP、XML、响应中返回 JSON 数组,并且 SOAP 请求的标头中包含用户名和密码。这里有一个页面解释了请求所需的 XML 以及响应的外观:http://ws.idssasp.com/members.asmx?op=GetMemberList&pn=0

在同一页面上,他们向您展示了如何通过 PHP 进行操作,但 PHP 不可用,我只能使用 ASP.NET 4.0。这是他们的 PHP 方法:

$clientWS = new SoapClient('http://ws.idssasp.com/Members.asmx?wsdl');
$namespaceWS = 'http://ws.idssasp.com/Members.asmx';

$dmsClientU = '';
$dmsClientP = '';

$headerBodyWS = array('UserName' => $dmsClientU, 'Password' => $dmsClientP);
$headerWS = new SOAPHeader($namespaceWS, 'AuthorizeHeader', $headerBodyWS, false);
$clientWS->__setSoapHeaders(array($headerWS));

$results = $clientWS->GetMemberList();

print_r( $results );

我如何能够在 ASP.NET 4.0 中做同样的事情,但不是返回 XML 结果,而是返回一个在页面上的脚本标记中使用的 JSON 变量?

或者我想太多了,有更好的解决方案吗?

【问题讨论】:

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


    【解决方案1】:

    如果您连接到 Web 服务并检索对象没有问题,您应该能够从 SOAP 响应的属性中构造 JSON 对象。

    我建议在 ASP.NET 中创建一个 Web 服务,将 SOAP 响应转换为 C# 服务器代码中的 JSON,然后在页面的 JavaScript 中使用 AJAX 从您的 Web 服务中检索 JSON。基本上,您将为位于中间的项目创建自己的专门转换 Web 服务。

    为您的 .asmx 转换服务保留服务器端所需的凭据。无论您做什么,都不要将凭据放入 Web 服务调用的客户端 JavaScript 中,即使这样可以避免编写服务器端代码。

    有关 ASP.NET Web 服务的一些参考:

    http://msdn.microsoft.com/en-us/library/bb398998%28v=vs.100%29.ASPX

    http://msdn.microsoft.com/en-us/library/bb763183%28v=vs.100%29.ASPX

    【讨论】:

    • 非常感谢,这对您有很大帮助!认为凭据将进入其他 Web 服务。但是想到另一个 Web 服务中的 WebService 会令人困惑……需要考虑一下我需要在站点根目录的 web.config 文件中放入什么……
    • 另外,如何将 SOAP 转换为 JSON?我还没有看到任何好的例子,但也许它们确实存在......
    • 不要将新的 Web 服务视为另一个 Web 服务的 inside - 它只是从您引用的外部服务中使用 XML 并将其转换为 JSON 以供您使用要使用的页面的 JavaScript。由于您的项目正在引用 WSDL,因此 SOAP 响应应作为普通 C# 对象返回。在您的服务的 Web 方法中,返回的 C# 对象只需序列化为 JSON,这可以通过构造 JSON 字符串手动完成,但最好使用 JSON.NET 之类的工具:james.newtonking.com/json
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2015-12-04
    • 2015-02-11
    • 2013-06-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    相关资源
    最近更新 更多