我有一个WCF服务,具有以下配置:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetadataEnabled">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetadataEnabled" name="MyNamespace.MyService">
<endpoint name="BasicHttp"
address=""
binding="basicHttpBinding"
contract="MyNamespace.IMyServiceContract" />
<endpoint name="MetadataHttp"
address="contract"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/myservice" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
在WcfSvcHost.exe进程中托管服务时,如果我浏览到URL:
服务元数据可用的地方我收到HTTP 400 Bad Request错误.
通过检查WCF日志,我发现抛出了System.Xml.XmlException异常,并显示消息:" 无法读取消息正文,因为它是空的. "
以下是日志文件的摘录:
<Exception>
<ExceptionType>
System.ServiceModel.ProtocolException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</ExceptionType>
<Message>There is a problem with the XML that was received from the network. See …Run Code Online (Sandbox Code Playgroud) Spring-WS生成WSDL而没有绑定标记中的操作......你知道为什么吗?
有我的spring-ws-service.xml:
<import resource="classpath*:application-context.xml" />
<!-- Register PayloadRootAnnotationMethodEndpointMapping -->
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" />
<!-- Register Endpoint -->
<bean id="tasktablerServiceEndpoint" class="tasktabler.mpk.service.TasktablerServiceEndpoint" />
<!-- Configure XML Marshaller -->
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="marshaller" />
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>tasktabler.mpk.databinding.OptimizeRequest</value>
</list>
</property>
</bean>
<!-- Add automatic WSDL generation support -->
<bean id="tasktabler" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="schema" />
<property name="portTypeName" value="tasktabler" />
<property name="locationUri" value="http://localhost:8080/tasktabler" />
<property name="targetNamespace" value="http://tasktabler" />
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/schema.xsd" />
</bean>
Run Code Online (Sandbox Code Playgroud)
并且有WSDL的wsdl绑定部分:
<wsdl:binding name="tasktablerSoap11" type="tns:tasktabler"> …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题,但我无法找到答案:
对于客户端,我需要提供Web服务.客户端向我发送了一个web服务应该"实现"的wsdl文件.我该怎么做?我已经生成了任意数量的客户端rpoxies,但这是另一种方式.我可以使用ASP.NET 2.0 Web服务或Windows Communication Foundation.
我正在使用Ruby Enterprise Edition和Rails 3来编写我的Web应用程序.该应用程序使用Ustream的Watershed白标广播服务为我的用户提供实时流媒体.不幸的是,我在开发期间遇到了障碍.Watershed允许应用程序通过在应用程序端实现SOAP服务来提供自己的身份验证层.必须在SOAP 1.2中实现此身份验证层才能与Watershed一起使用.令我非常沮丧的是,似乎Ruby社区已经过去了,因为SOAP已经过了一个充满REST和Unicorns的更光明的未来.
这让我很高兴99.9%的时间.但是现在我需要在我的闪亮的新Rails 3应用程序中创建一个SOAP 1.2端点.
如果有人有我可以使用的任何建议或图书馆,我将非常感激.
我正在尝试为访问WSDL描述的Web服务的Java应用程序编写一个模块.源WSDL直接从我认为是ASP.NET Web服务下载; 服务URL以.asmx扩展名结尾,在浏览器中查看服务URL显示可用于下载WSDL的链接.
对我而言,一个关键要求是能够在不重新编译的情况下切换服务URL.给我的URL显然是一个测试服务器,我知道在生产中我将获得一个生产URL使用.我还希望能够自己创建一个模拟服务器进行测试,并保留将来指定新URL的功能,而无需在移动服务时重新编译.实际上,我希望我们的应用程序的安装能够在不同的URL 实例化web服务的多个实例.
但我的概念似乎与wsimport工具为我做的事情不相符.继f1sh的答案在这里,我生成的Java代码从我用这个命令下载WSDL:
wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl
Run Code Online (Sandbox Code Playgroud)
我发现生成的代码对我下载的wsdlFile.wsdl有一个硬编码的引用,其中包含服务URL.我们的应用程序不会以通过在运行时编辑WSDL文件来配置它的方式运行.我需要在构建时将代码编译到我的应用程序中,并且可以在实例化时设置服务URL.
我不完全确定为什么WSDL甚至需要在运行时解析; 我的理解是WSDL提供了足够的信息来生成可以访问web服务的代码,所以我不确定它为服务URL以外的生成代码提供了什么,我不知道为什么服务URL没有提供构造函数或可通过生成的Web服务类上的方法进行配置.我肯定错过了什么.
这种情况的一般做法是什么?大多数人会为他们将要使用的每个URL重新生成代码吗?代码是在运行时生成的吗?是否有另一个我可以使用的WSDL工具,它将使用可配置的URL构建客户端代码?
这让我疯了.我在WSDL中嵌入了需要自定义的模式,因为WSIMPORT引发了以下错误
[ERROR] Complex type and its child element share the same name "DomainsMap".
Use a class customization to resolve this conflict.
line 878 of file:/C:/jaxws-ri/bin/ArtesiaWebServices.wsdl
Run Code Online (Sandbox Code Playgroud)
1)我无法控制这个WSDL,因为我正在构建一个WSDL第一个客户端,并且我希望它能够在没有任何正式咨询或发布给我的情况下进行修订.2)手动修复此命名冲突是不可接受的,因为我需要将存根的构造包含在自动构建链中.
我必须使用外部自定义文件.我似乎无法弄清楚如何让定制工作.
这是违规的WSDL片段:
<wsdl:definitions>
<wsdl:types>
<xs:schema>
.
.
.
<xs:complexType final="extension restriction" name="domainsMap">
<xs:sequence>
<xs:element name="domainsMap">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="key" type="xs:string"/>
<xs:element minOccurs="0" name="value" type="tns:domainValueMap"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
这将是您展示JAXB技能的绝佳机会.任何帮助将不胜感激.
我一直盯着jaxb文档几个小时但仍然没有运气.如果需要,我可以提供整个WSDL.有人可以帮忙吗?
我正在使用maven脚本生成我需要与WCF服务通信的Java代码.我已经进行了沟通工作,并准备将我的maven脚本及其生成的代码与项目中的其余Java代码集成.
但是,我无法让maven生成具有我想要的正确包名的代码.从我在网上看到的,我应该使用标签,我已经看到了两个可能的地方.我已经包含了我认为需要进入的脚本部分,以及它们都存在.但是,这些标记不会产生任何影响,代码生成就像没有它们一样
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<configuration>
<packageName>com.name.server.cxf</packageName>
<sourceRoot>src/com/server/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>src/com/server/cxf/code-generation/service.xml</wsdl>
<bindingFiles>
<bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile>
</bindingFiles>
<extraargs>
<extraarg>-validate</extraarg>
<extraarg>-client</extraarg>
<extraarg>-verbose</extraarg>
<extraarg>-xjc-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
<verbose />
</configuration>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<packageName>com.name.server.cxf</packageName>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
也许我使用的是错误的标签,或者它可能是在错误的地方?
一个不同的问题,与基本问题.在我的WSDL文件的末尾.
<wsdl:service name="Lighting">
<wsdl:port name="SwitchPower" binding="tns:SwitchPower">
<soap:address location="http://localhost:8080/Lighting/SwitchPower/" />
</wsdl:port>
<wsdl:port name="Dimming" binding="tns:Dimming">
<soap:address location="http://localhost:8080/Lighting/Dimming/" />
</wsdl:port>
</wsdl:service>
Run Code Online (Sandbox Code Playgroud)
具有两个端口的相同服务.这样对吗?
如果不是,规范的规则是什么?
每次我运行wsimport,我都会收到此错误:
[错误]"不支持使用SOAP编码.文件中第65行的SOAP扩展元素:dummy.wsdl has use ="encoded""无法解析WSDL.
WSDL(错误块):
<wsdl:input name="dummyRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:cmg.stdapp.webservices.generalplugin" use="encoded" />
</wsdl:input>
Run Code Online (Sandbox Code Playgroud) 这是我第一次在PHP上做SOAP(实际上我是一个菜鸟),我坚持这个问题好几个月了.
https://wstest.oriongateway.com:22837/willani/services/oglws?wsdl
Run Code Online (Sandbox Code Playgroud)
这是webservice URL,他们在生产时请求双向SSL,他们为我提供了一组私钥和公共证书,可以在我的服务器上安装.
我可以通过在浏览器上安装私钥来查看URL.
此时,我已经通过无向SSL和单向SSL成功获得了webservice的响应,但是双向SSL无法正常工作.
我通过SOAP提交双向SSL时出现错误消息.
警告:SoapClient :: __ doRequest():SSL操作失败,代码为1. OpenSSL错误消息:错误:14094412:SSL例程:SSL3_READ_BYTES:sslv3警告错误证书/home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice第124行的.php
警告:SoapClient :: __ doRequest():无法在第124行的/home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice.php中启用加密
警告:SoapClient :: __ doRequest():connect ()失败:第124行/home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice.php中的未指定错误
我的SOAP请求文件
<?php
require_once 'OglWsService.php';
$requestMsg = new RequestMsg;
$requestMsg->amount="1000";
$requestMsg->merchantId="620055";
$requestMsg->operatorId="IBS";
$requestMsg->retTransRef="102182ABCqw1238";
$requestMsg->terminalId="10000102";
$requestMsg->productCode="DIGI";
$requestMsg->transDateTime=date("YmdHis");
$requestMsg->transTraceId = (int)"123212321";
$in0 = new onlinePIN();
$in0->in0=$requestMsg;
$oglWsService = new OglWsService();
$reponseMsg = $oglWsService->onlinePIN($in0);
$arr=get_object_vars($reponseMsg);
print_r($arr);
echo $arr['onlinePINReturn']->transRef;
?>
Run Code Online (Sandbox Code Playgroud)
我的Webservice类
<?php
class RequestMsg {
public $amount; // string
public $merchantId; // string
public $operatorId; // string
public $orgTransRef; // string
public $retTransRef; // …Run Code Online (Sandbox Code Playgroud)