情景
我必须使用.NET客户端访问Web服务.该服务是Apache CXF Web服务.需要用户名和密码验证.我创建了代理.我已经设置了凭证.
MyServiceReference proxy = new MyServiceReference();
proxy.Credentials = new NetworkCredential("username", "password");
string res = proxy.Method1();
Run Code Online (Sandbox Code Playgroud)
当我运行客户端时,抛出以下异常:
System.Web.Services.Protocols.SoapHeaderException: An error was discovered processing the <wsse:Security> header
Run Code Online (Sandbox Code Playgroud)
服务发布者告诉我,SOAP头中没有凭据.所以,我猜IWebProxy.Credentials不是设置身份验证的正确方法.
题
那么,我如何设置身份验证所需的SOAP头?
我使用JAX-WS RI生成了客户端java对象.我正在尝试向Web服务发出SOAP请求.服务需要在标头中进行身份验证,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<xsd:authHeader>
<xsd:user>username@gmail.com</xsd:user>
<xsd:password>password1</xsd:password>
</xsd:authHeader>
</soapenv:Header>
<soapenv:Body>
<ns:searchAssetsParam>
<ns:includeSubfolders>true</ns:includeSubfolders>
<ns:resultsPage>2</ns:resultsPage>
</ns:searchAssetsParam>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
生成的java对象具有调用服务,创建对象和构造头的方法.但是,我在拨打电话时设置标头时遇到问题.
这是我正在使用的代码:
IpsApiService service = new IpsApiService();
IpsApiPortType port = service.getIpsApiSoapPort();
SearchAssetsParam searchAssetsParam = buildSearchAssetsParam();
SearchAssetsReturn response = port.searchAssets(searchAssetsParam);
Run Code Online (Sandbox Code Playgroud)
buildSearchAssetsParam()构造请求对象.我创建了头对象,如下所示:
AuthHeader header = new AuthHeader();
header.setUser("username@gmail.com");
header.setPassword("password1");
Run Code Online (Sandbox Code Playgroud)
如何将此AuthHeader设置为服务请求?
谢谢,Venu
我需要在我的新Web服务中包含一个身份验证标头(即作为SOAP标头请求的一部分).该身份验证标头将验证userId和密码详细信息.我必须在我的Web服务中验证请求标头详细信息的内容以进行身份验证.如果经过身份验证,则将处理请求的SOAP主体,否则Web服务将向无效身份验证消息发送回调用该服务的客户端应用程序.
我无法理解如何创建一个Web服务,其中SOAP Header将包含一些元素(在我的例子中,身份验证元素,如userId和password).
通常,服务中公开的任何方法都将作为SOAP Body的一部分.因此混淆了如何继续在SOAP Header中添加认证元素.
请帮忙
问候,
我们正在使用spring-ws 2.2.0开发一个契约优先的WebService.我们正在尝试使用AuthToken位于SoapHeader中的自定义标记来管理身份验证.该AuthToken结构如下:
<authToken>
<username>USERNAME</xa:username>
<password>PASSWORD</xa:password>
</authToken>
Run Code Online (Sandbox Code Playgroud)
我们能够在SoapHeader中生成包含指定自定义身份验证标记的WSDL模式.问题是当客户端对我们的服务器执行调用时,我们无法在Ws Endpoint实现中解组AuthToken标记(位于SoapHeader中).
使用@RequestPayload绑定方法签名中的注释(handleMethodRequest如下例所示),我们可以访问未编组的有效内容(位于SoapBody中).我们尝试使用SoapHeader内容做同样的事情而没有成功.在下面的代码示例中,我们将向您展示我们想要获得的内容:
1
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "methodRequest")
@ResponsePayload
public MethodResponse handleMethodRequest(@RequestPayload MethodRequest request, @SoapHeader(value = "authToken") AuthToken authToken) { }
2
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "methodRequest")
@ResponsePayload
public MethodResponse handleMethodRequest(@RequestPayload MethodRequest request, AuthToken authToken) { }
3
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "methodRequest")
@ResponsePayload
public MethodResponse handleMethodRequest(@RequestPayload MethodRequest request, org.springframework.ws.soap.SoapHeader header) { }
4
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "methodRequest")
@ResponsePayload
public …Run Code Online (Sandbox Code Playgroud) 我们获得了一组消费的ASMX服务.我们对如何实施这些服务没有发言权.我们使用wsdl.exe工具生成了许多代理,但由于某些原因我不知道,这些生成的代理没有任何方法可以包含自定义SOAP头.
基本上,我需要一种方法来将自定义标头数据添加到各种服务调用.
我知道存在SoapExtension类,但遗憾的是由于存在性能问题,我们不允许使用它.
是否有任何其他方法可以在SOAP请求中自定义/添加标头数据?
我正在尝试使用 jQuery Ajax 调用 asmx 服务。
POST /YderWS.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://scandihealth.com/iwebservices/HentKommuner"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<AuthHeader xmlns="http://scandihealth.com/iwebservices/">
<PartnerID>string</PartnerID>
<SubPartnerID>string</SubPartnerID>
<SubPartnerType>string</SubPartnerType>
</AuthHeader>
</soap:Header>
<soap:Body>
<HentKommuner xmlns="http://scandihealth.com/iwebservices/" />
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
以上是我需要发送到服务的 SOAP 1.1 请求。我使用下面的调用来设置自定义肥皂头。但我的请求失败了。有人可以帮我调试下面的代码并让我知道我需要做什么吗?
var authHeader = "<PartnerID>SCTEST001</PartnerID> <SubPartnerID>001</SubPartnerID> <SubPartnerType>S</SubPartnerType>";
//Call the page method
$.ajax({
type: "GET",
url: servicename + "/" + functionName,
beforeSend: function (xhr) {
xhr.setRequestHeader('AuthHeader', authHeader);
},
success: successFn,
error: errorFn
});
Run Code Online (Sandbox Code Playgroud)
编辑*如果需要其他信息来回答这个问题,请告诉我。*
我一直在尝试向SOAP请求添加标头,如下所示
<soapenv:Header>
<UsernameToken xmlns="http://test.com/webservices">username</UsernameToken>
<PasswordText xmlns="http://test.com/webservices">password</PasswordText>
<SessionType xmlns="http://test.com/webservices">None</SessionType>
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)
我发现了用于SoapHeader包含标头值的建议,但引入了另一个级别,例如
<soapenv:Header>
<CustomHeader>
<UsernameToken xmlns="http://test.com/webservices">username</UsernameToken>
<PasswordText xmlns="http://test.com/webservices">password</PasswordText>
<SessionType xmlns="http://test.com/webservices">None</SessionType>
</CustomHeader>
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我如何提出请求CustomHeader。
我正在为服务(不是WCF)编写WCF客户端。收到未处理的'mustUnderstand'标头元素的错误:{http://www.w3.org/2005/08/addressing}操作,因为请求SOAP包含标有mustunderstand ='true'的标头。我必须将其设置为false或删除整个标题。你能显示出这样做的方法吗?
这是绑定代码
var transportElement = new HttpsTransportBindingElement();
transportElement.AuthenticationScheme = AuthenticationSchemes.Basic;
var messegeElement = new TextMessageEncodingBindingElement();
messegeElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap11);
var binding = new CustomBinding(messegeElement, transportElement);
return binding;
Run Code Online (Sandbox Code Playgroud) 我正在使用wsHttpBindingWCF服务.
我添加了一个Web引用,我有了Web代理(它基于SoapHttpClientProtocol).
此外,我尝试使用wsdl.exewcf服务(http://zzzz/zz.svc?wsdl)生成的实际wsdl 构建代理.
当客户端调用该服务时,我收到以下错误:
The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/Service1/Operation1'.
为什么客户端(Web代理)不能使用我的WCF服务?
我应该采取哪些措施才能使它们发挥作用?
我正在运行.NET FW 3.5和ASP.NET 2.0.
我基于xmlbeans构建了wsdl-client-stub.现在我卡住了使用xmlbeans添加自定义标头以进行身份验证,因为xmlbeans存根缺少必要的类(?)
实际上,标题应如下所示:
<SOAP-ENV:Header>
<ns2:verifyingToken>
<UserID>9</UserID>
<Token>29438094lkjslfkjlsdkjf</Token>
</ns2:verifyingToken>
</SOAP-ENV:Header>
Run Code Online (Sandbox Code Playgroud)
所以我尝试在存根和ServiceClient之间进行后退:
ServiceClient sc = stub._getServiceClient();
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMElement omElement = omFactory.createOMElement(new QName("SOAP-ENV", "Header", "ver"), null);
OMElement omElementVeri = omFactory.createOMElement(new QName("", "verifyingToken", ""), omElement);
OMElement omElementUser = omFactory.createOMElement(new QName("", "UserID", ""), omElementVeri);
omElementUser.setText(""+userid);
OMElement omElementPass = omFactory.createOMElement(new QName("", "Token", ""), omElementVeri);
omElementPass.setText(""+token);
sc.addHeader(omElement);
Run Code Online (Sandbox Code Playgroud)
eclipse引发错误说:OMFactory类型中的方法createOMElement(String,OMNamespace)不适用于参数(QName,null) - 构造函数QName(String,String,String)未定义
有没有人有一个暗示,我应该修复,让这个工作.我非常感谢你的帮助,
亚历克斯
我正在尝试通过ESB转发简单的Web服务调用,但Send mediator会从SOAP消息中删除所有标头.
来源讯息:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://tempuri.org/TestService/SendMessage</a:Action>
<a:MessageID>urn:uuid:51d31061-2eab-41cf-b073-3dbee322e0e1</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">http://if-golubets-dn:8000/test</a:To>
</s:Header>
<s:Body>
<SendMessage xmlns="http://tempuri.org/">
<message>Test</message>
</SendMessage>
</s:Body>
Run Code Online (Sandbox Code Playgroud)
发送后的消息:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header />
<s:Body>
<SendMessage xmlns="http://tempuri.org/">
<message>Test</message>
</SendMessage>
</s:Body>
Run Code Online (Sandbox Code Playgroud)
如何保留Action标头?我试过头部调解员,但它没有帮助.