RE: [SOAP] Web service with several operations : only the first one works
| From: | Michael Rasmussen | Date: | Thu, 09 Jun 2005 17:33:44 +0000 |
| Subject: | RE: [SOAP] Web service with several operations : only the first one works | ||
| References: | 1 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-1933@lists.php.net to get a copy of this message | ||
On Thu, 09 Jun 2005 14:21:38 +0200, LEBUR Guillaume wrote:
>
> Michael> I can't switch to RPC/encoded since the web service will also
> have to be reached in MS InfoPath forms. Such forms (as well as any DotNet
> SOAP client, I think) only accept doc/lit style responses.
>
This is not correct. The preferred way in .NET is doc/literal but this
does not in any way mean that it cannot do rpc/encoded. I have made
several client/servers using rpc/encoded which runs without any problems
under .NET.
A very brief helloworld example client in C# connecting to a PHP server
using rpc/encoded:
//------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.1.4322.2032
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by Microsoft.VSDesigner, Version 1.1.4322.2032.
//
namespace WindowsApplication1.WebReference {
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;
/// <remarks/>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="BasicHelloServerBinding",
Namespace="urn:BasicHelloServer")]
public class BasicHelloServerService : System.Web.Services.Protocols.SoapHttpClientProtocol {
/// <remarks/>
public BasicHelloServerService() {
this.Url = "http://192.168.2.96/~mir/soap/day8/BasicServer.php";
}
/// <remarks/>
[System.Web.Services.Protocols.SoapRpcMethodAttribute("BasicHelloServer#helloserver#sayhello",
RequestNamespace="BasicHelloServer", ResponseNamespace="BasicHelloServer")]
[return: System.Xml.Serialization.SoapElementAttribute("outmessage")]
public string sayhello(string inmessage) {
object[] results = this.Invoke("sayhello", new object[] {
inmessage});
return ((string)(results[0]));
}
/// <remarks/>
public System.IAsyncResult Beginsayhello(string inmessage, System.AsyncCallback callback,
object asyncState) {
return this.BeginInvoke("sayhello", new object[] {
inmessage}, callback, asyncState);
}
/// <remarks/>
public string Endsayhello(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((string)(results[0]));
}
}
}
The automatic generated wsdl (with wsdl.exe):
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="urn:BasicHelloServer" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="urn:BasicHelloServer" name="BasicHelloServer"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types />
<wsdl:message name="sayhelloRequest">
<wsdl:part name="inmessage" type="s:string" />
</wsdl:message>
<wsdl:message name="sayhelloResponse">
<wsdl:part name="outmessage" type="s:string" />
</wsdl:message>
<wsdl:portType name="BasicHelloServerPort">
<wsdl:operation name="sayhello">
<wsdl:input message="tns:sayhelloRequest" />
<wsdl:output message="tns:sayhelloResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHelloServerBinding"
type="tns:BasicHelloServerPort">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc" />
<wsdl:operation name="sayhello">
<soap:operation soapAction="BasicHelloServer#helloserver#sayhello" />
<wsdl:input>
<soap:body use="encoded" namespace="BasicHelloServer"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded" namespace="BasicHelloServer"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="BasicHelloServerService">
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">This
service returns Hello <name></documentation>
<wsdl:port name="BasicHelloServerPort"
binding="tns:BasicHelloServerBinding">
<soap:address location="http://192.168.2.96/~mir/soap/day8/BasicServer.php"
/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917