我有一个在CLI模式下运行的应用程序,它既不需要也不需要运行本地httpd.应用程序使用SOAP与Web服务提供程序进行传出交互.有问题的提供商存在一些可用性问题,我们正试图通过在他们的建议下在本地托管WSDL文件来减少问题的数量.
似乎SoapClient构造函数(在WSDL模式下)只能使用URI WSDL文件,但我试图找出解决此限制的一些方法,并让它以某种方式从本地文件系统读取WSDL文件.我很惊讶SoapClient构造函数没有传递文件名或文本字符串的选项,我之前可以简单地读取它.
有人有人建议如何避开这个限制并做我正在尝试的事情吗?
下载WCF服务公开的所有WSDL文件的最佳方法是什么?
例如,根WSDL文件引用以下其他WSDL文件:
<xsd:import schemaLocation="http://localhost:80/?xsd=xsd0" namespace="http://tempuri.com"/>
<xsd:import schemaLocation="http://localhost:80/?xsd=xsd1" namespace="http://tempuri.com"/>
Run Code Online (Sandbox Code Playgroud)
理想情况下,可以自动执行下载,以便每次WSDL更改时,都可以轻松地将文件分发给客户或合并到文档/ SDK中.
我正在尝试为National Rail Inquiries的SOAP服务(http://www.livedepartureboards.co.uk/ldbws/)实施客户端.
我将WSDL(http://realtime.nationalrail.co.uk/ldbws/wsdl.aspx)粘贴到http://soapclient.com/soaptest.html中,但我收到错误消息"无法处理请求有效的行动参数.请提供有效的肥皂行动."; 究竟应该采取什么行动呢?
谢谢,斯图尔特
编辑:
我只是用soapclient.com作为一个简单的例子.在我的软件中,我发送以下XML; 我仍然觉得我错过了一个动作.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://thalesgroup.com/RTTI/2008-02-20/ldb/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ldbt2="http://thalesgroup.com/RTTI/2008-02-20/ldb/types" xmlns:ldbt="http://thalesgroup.com/RTTI/2007-10-10/ldb/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ct="http://thalesgroup.com/RTTI/2007-10-10/ldb/commontypes" >
<SOAP-ENV:Body>
<ldbt2:GetDepartureBoardRequest xmlns:ldbt2="http://thalesgroup.com/RTTI/2008-02-20/ldb/" >
<ldbt2:numRows>5</ldbt2:numRows>
<ldbt2:crs>WAT</ldbt2:crs>
<ldbt2:filterCrs>GLD</ldbt2:filterCrs>
<ldbt2:filterType>to</ldbt2:filterType>
<ldbt2:timeOffset>0</ldbt2:timeOffset>
</ldbt2:GetDepartureBoardRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud) 我已经创建了这样的WebService:
[WebService(Namespace = "http://ns")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class GroupManagerService : WebService
{
public GroupManagerService()
{
}
[WebMethod]
public bool MyMethod(string loginname, string country)
{
// code here...
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以为此代码生成WSDL文件而无需连接到正在运行的服务?我搜索,我发现有关信息svcutil.exe的&Wsdl.exe用,但这些只能从运行WebService的检索WSDL时工作.
(对于java,有一个名为java2wsdl的工具,是否有等效的c#?)
:更新:
此问题的上下文是我要向SharePoint添加新的CustomWebService,它应该使用SharePoint上的_vti_bin文件夹中的WSPBuilder进行部署.另请参阅我在SharePoint.SE上的帖子.
我想自动生成(使用msbuild命令)'MyServicewsdl.aspx'和'MyServicedisco.wsdl',它必须放在_vti_bin文件夹中.
也许我错过了一些东西?svcutil.exe的输出是:
bin\Debug>SvcUtil.exe MyWebService.dll
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]
Copyright (c) Microsoft Corporation. All rights reserved.
Generating metadata files... …Run Code Online (Sandbox Code Playgroud) 构建一个依赖于第三方提供商的应用程序,该提供商拥有非常冗长的SOAP服务(我们正在讨论50多个WSDL文件).但是,每个单独的WSDL都有许多共享类型声明.使用wsdl.exe生成客户端代码时,曾经有一个/ sharedtypes标志,如果多次找到类型,它将合并重复的条目.
当我尝试生成我的客户端代码时,我会轰炸第三方在其所有WSDL文件中包含的这些重叠类型.
svcutil /t:code /importxmltypes [mypath]/*.wsdl
Run Code Online (Sandbox Code Playgroud)
导致错误消息导致类型冲突.例如,以下错误消息的几个示例:
Error: There was an error verifying some XML Schemas generated during export:
The simpleType 'http://common.soap.3rdparty.com:CurrencyNotation' has already been
declared.
Error: There was an error verifying some XML Schemas generated during export:
The complexType 'http://common.soap.3rdparty.com:NumberFormat' has already been
declared.
Run Code Online (Sandbox Code Playgroud)
我无法控制WSDL的输出.我不想手动编辑WSDL,因为担心在运行时以某种方式破坏的错误很难追溯到我们编辑WSDL文件.更不用说有50个一些WSDL文件,其范围从200到1200行XML.(再次提醒我为什么我们认为SOAP在90年代后期对我们所有人来说都是伟大的救赎?)
我尝试使用axis2(1.5.1)版本从wsdl文件生成java代码,但我无法弄清楚什么是正确的pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-wsdl2code-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<goals>
<goal>wsdl2code</goal>
</goals>
<configuration>
<wsdlFile>src/main/resources/wsdl/stockquote.wsdl</wsdlFile>
<databindingName>xmlbeans</databindingName>
<packageName>a.bc</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
当我输入mvn编译时,它会抱怨
Retrieving document at 'src/main/resources/wsdl/stockquote.wsdl'.
java.lang.ClassNotFoundException: org.apache.xml.serializer.TreeWalker
Run Code Online (Sandbox Code Playgroud)
如果我试图找到TreeWalker,找到一个合适的jar文件是一团糟.
你有人能给我一些提示吗?或者给我正确的pom.xml
[更新] xalan-2.7.0.jar也需要依赖,并且jar文件被破坏(由于nexus问题),thx pascal
我有一个程序javax.xml.ws.Service用于调用由WSDL定义的远程服务.此程序在Google App Engine上运行,默认情况下,将HTTP连接超时设置为5秒{1}.我需要增加此超时值,因为此服务通常需要很长时间才能响应,但由于此请求未进行URLConnection,我无法弄清楚如何调用URLConnection.setReadTimeout(int){2}或以其他方式更改超时.
有没有办法在App Engine上全局设置HTTP连接超时?而且,为了分享知识,人们将如何解决这类问题呢?
{1}:https://developers.google.com/appengine/docs/java/urlfetch/overview#Requests
{2}:http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout(int)
我正在尝试使用PHP和SOAP运行Web服务,但到目前为止,我所得到的只是:
(SoapFault)[2]消息指出:'SOAP-ERROR:解析WSDL:无法从' http://localhost/MyRegistration/login.xml '加载:无法加载外部实体" http:// localhost/MyRegistration /login.xml "
我已经尝试将localhost更改为127.0.0.1,但这没有任何区别.login实际上是一个wsdl文件,但是如果我把login.wsdl放在SOAPClient构造函数中,它会说"'看起来好像我们没有XML文档'".
这是我的SOAP客户端代码(register_client.php):
<?php
try
{
$sClient = new SoapClient('http://127.0.0.1/MyRegistration/login.wsdl');
$param1 = $_POST["regname"];
$param2 = $_POST["regpass1"];
$response = $sClient->loginVerify($param1, $param2);
var_dump($response);
}
catch(SoapFault $e)
{
var_dump($e);
}
?>
Run Code Online (Sandbox Code Playgroud)
这是login.wsdl文件:
<?xml version="1.0"?>
<definitions name="LoginVal"
targetNamespace="urn:LoginVal"
xmlns:tns="urn:LoginVal"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Login">
<xsd:element name="getName" type="xsd:string" />
<xsd:element name="getPass" type="xsd:string" />
<xsd:element name="LoginResponse" type="xsd:string" />
</xsd:schema>
</types>
<message name="loginVerify">
<part name="username" type="tns:getName" />
<part name="password" type="tns:getPass" />
</message>
<message name="doLoginResponse">
<part name="return" …Run Code Online (Sandbox Code Playgroud) 我必须通过Web服务访问crm 2011中的潜在客户(创建新的潜在客户并获取列表).我已经在c#/ asp.net中创建了一个应用程序(它可以工作),但现在我必须在php中完成它并且我被卡住了.
我尝试:https://code.google.com/p/php-dynamics-crm-2011/,但它不起作用,因为它只支持联合身份验证并挖掘它的活动目录.
我尝试与nusoap连接,但这非常令人困惑.
我使用wsdl2php生成发现服务和组织服务类:http://www.urdalen.no/wsdl2php/ 但我不知道如何处理这些类.
有人举例说明如何使用这些类?
我试图理解elementFormDefault="qualified/unqualified"嵌入在WSDL(SOAP 1.1,WSDL 1)中的XML模式的含义.
例如,我在WSDL中有这个模式:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/library">
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
在纯XML中,这显然是无效的,因为"name"没有指定的命名空间:
<lib:person xmlns:lib="http://www.example.com/library">
<name>XML Schema</name>
</lib:person>
Run Code Online (Sandbox Code Playgroud)
虽然这显然是有效的,因为所有元素都是合格的:
<lib:person xmlns:lib="http://www.example.com/library">
<lib:name>qualified xml</lib:name>
</lib:person>
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是libxml说以下内容也是有效的:
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
Run Code Online (Sandbox Code Playgroud)
问题1:我认为qualified意思<person>应该是这个样子<lib:person xmlns:lib="...">.但结果似乎表明该xmlns属性是一样的?
现在假设上面的XML是SOAP请求的一部分,例如
...
<s:Body>
<person xmlns="http://www.example.com/library">
<name>XML Schema</name>
</person>
</s:Body>
...
Run Code Online (Sandbox Code Playgroud)
问题2:如果WSDL包含qualified上面显示的模式,请求上面的请求是否有效?(普通SOAP,无视WS-I基本配置文件)
问题3当我考虑WS-I Basic配置文件(特别是4.1.13 SOAP Body和Namespaces)时上述请求是否仍然有效?(被person认为是"命名空间合格"?)