Уже не один день мучаюсь с этой связкой.
Есть программа под .net2. Сервер: BSD/Apache/PHP5/SOAP. SOAP — стандартный extension.
Для связи с сервером используется, так сказать, "HTTP/SOAP .NET Remoting".
Из этого способа связи получилось выжать передачу простых типов и массивов простых типов с сервера.
Основная задача: помимо простых, передать комплексные типы или структуры.
Избавиться от ".NET Remoting" можно. Мне интересно любое более-ли-менее нормальное для PHP решение, позволяющее передавать в .net2 требуемые типы.
Помогите, кто знает что-то по этой теме!
По поводу связки "dotNET Remoting и PHP" практически ничего в интернете нет.
Если нужно, выложу код того, что есть.
Здравствуйте, nerozero, Вы писали:
N>Здравствуйте, halic, Вы писали:
H>>Если нужно, выложу код того, что есть.
N>Будьте так любезны, мне эту связку в скором времяни предстоит решить! Так что будет интересно глянуть на Ваше решение.
тут всё просто
WSDL-файл переписывал сто раз, а комплексные типы так и не передаёт...
static class RpcClient
{
public static string Url = null;
static RpcClient()
{
ChannelServices.RegisterChannel(new HttpChannel(null, new SoapClientFormatterSinkProvider(), null), false);
}
public static object QueryInterface(Type i)
{
return Activator.GetObject(i, RpcClient.Url);
}
}
использовать так:
internal interface IS_Messages
{
string[] getMessages();
}
RpcClient.Url = "http://localhost:80/soap/oops.php";
IS_Messages iface = (IS_Messages)RpcClient.QueryInterface(typeof(IS_Messages));
foreach (string msg in iface.getMessages())
{
MessageBox.Show(msg);
}
типа WebService:
class OOPS_WebService
{
function getMessages()
{
return array("message#1", "message#2", "message#3");
}
}
$server = new SoapServer("oops.wsdl");
$server->setClass("OOPS_WebService");
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$server->handle();
}
else
{
echo "xpen";
}
wsdl-ка:
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="urn:oops"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="urn:oops"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
name="OOPS_WebService">
<types>
<xsd:complexType name="StringsArray">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</types>
<message name='getMessagesResponse'>
<part name='return' type='tns:StringsArray'/>
</message>
<portType name='OOPS_WebService_PortType'>
<operation name='getMessages'>
<output message='tns:getMessagesResponse'/>
</operation>
</portType>
<binding name='OOPS_WebService_Binding' type='tns:OOPS_WebService_PortType'>
<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http' />
<operation name='getMessages'>
<soap:operation soapAction='urn:oops#getMessages'/>
<output>
<soap:body use='encoded' namespace='urn:oops' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</output>
</operation>
</binding>
<service name='OOPS_WebService'>
<port name='OOPS_WebService_SOAP' binding='tns:OOPS_WebService_Binding'>
<soap:address location='http://localhost/soap/oops.php'/>
</port>
</service>
</definitions>
мог гдето ошибиться, когда редактировал ... заранее sorry!