dotNET Remoting и PHP
От: halic  
Дата: 27.02.07 10:46
Оценка:
Уже не один день мучаюсь с этой связкой.
Есть программа под .net2. Сервер: BSD/Apache/PHP5/SOAP. SOAP — стандартный extension.
Для связи с сервером используется, так сказать, "HTTP/SOAP .NET Remoting".
Из этого способа связи получилось выжать передачу простых типов и массивов простых типов с сервера.
Основная задача: помимо простых, передать комплексные типы или структуры.
Избавиться от ".NET Remoting" можно. Мне интересно любое более-ли-менее нормальное для PHP решение, позволяющее передавать в .net2 требуемые типы.
Помогите, кто знает что-то по этой теме!
По поводу связки "dotNET Remoting и PHP" практически ничего в интернете нет.
Если нужно, выложу код того, что есть.
Re: dotNET Remoting и PHP
От: nerozero  
Дата: 27.02.07 18:17
Оценка:
Здравствуйте, halic, Вы писали:

H>Если нужно, выложу код того, что есть.


Будьте так любезны, мне эту связку в скором времяни предстоит решить! Так что будет интересно глянуть на Ваше решение.
Re[2]: dotNET Remoting и PHP
От: halic  
Дата: 27.02.07 18:50
Оценка:
Здравствуйте, 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!
Re[3]: dotNET Remoting и PHP
От: nerozero  
Дата: 27.02.07 19:00
Оценка:
Здравствуйте, halic, Вы писали:

H>мог гдето ошибиться, когда редактировал ... заранее sorry!


Примного благодарен!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.