Birden bağlamaları ile bir WCF web hizmetini çağırmak PHP Kullanımı

2 Cevap php

Ben kullanıcı adı ve kullanma Temel HTTP hem WS-HTTP istemcileri, hem de HTTPS üzerinden sağlayan bir WCF web hizmeti var parola doğrulaması. Bu, aynı hizmet iki bağlama ile elde edilir.

Yani, servis https://foo.com/Service.svc , the Basic HTTP (SOAP 1.1) endpoint is https://foo.com/Service.svc/Unp11 , and the WS-HTTP (SOAP 1.2) endpoint is https://foo.com/Service.svc/Unp yer almaktadır.

Bir istemci, kendi dahili SOAP desteğini kullanarak, PHP 5 ile bu web hizmeti erişmeye çalışıyor, ve sorun servisine bağlanmadan yaşıyor. O soap ileti kötü oluşturulur, ya da bir SOAP 1.1 mesajı bir SOAP 1.2 bitiş (veya tersi) gönderilir ise gerçekleşmesi eğilimi bir HTTP 400 (Bad Request) yanıt, olmaya devam ediyor.

Ben sorun ona yardım yaşıyorum o yüzden sadece temel PHP biliyorum. Sana yaparak bir istemci oluşturmak biliyorum

$client = new SoapClient('https://foo.com/Service.svc?wsdl');

ama nasıl bağlama / bitiş belirtebilirim? PHP ile tüm bu ulaşmada herhangi bir bilinen sorunlar var mı?

UPDATE

Tamam, bu yüzden WCF servisine bağlanmak için PHP kullanabilirsiniz ok (SoapClient yapıcısındaki soap sürümünü belirterek) ve $client->__getFunctions() tüm web servis operasyonlarının doğru bir listesini döndürür çağırıyor .

Ben kullanarak birini aramak çalıştığınızda $client->__soapCall, sayfa sadece uzunca bir süre orada yükleme oturur, ve sonunda "Error Fetching http headers" hata verir. Tam olarak ne demek gerekiyordu ve ben bunu nasıl düzeltebilirim? (. Net istemci hizmeti tüketmek mükemmel çalışıyor.)

2 Cevap

Sadece bir PHP arayan için birden bağları olan bir WCF oluştururken, bugün bu koştu. Konumunu ayarlama WSDL PHP'nin SoapClient sürümü ve kullanmak için bir bağlama belirterek izin vermek için, görünür.

WCF yapılandırma, (2 bağlamaları wsHttp ve BasicHttp ile 1 servis) oldukça düz ileri.

PHP kodu:

$client = new SoapClient("http://example.com/service.svc?wsdl");
$client->__setLocation("http://example.com/service.svc/basic");
$response = $client->MethodName(array( "paramName" => "paramValue" ... ));

Biz birkaç bağları olan bir SOAP hizmeti var. Bir WSDL bir hizmet başvuru eklediğinizde C # her biri için oluşturulan bir sınıf olsun, ama PHP size kullanmak istediğiniz bağlayıcı belirtebilirsiniz edemez görünüyor - bu bana sorun neden oldu bağlamaları çelişkili türü / yöntemi varken isimler. Genellikle Tamam olsa çalışmak gibi görünüyor ama gerçekten içten onunla uğraşıyor bilmiyorum.

Sunucu bir parametre bekliyor ise bazen geri Bad Request almak ve oldukça doğru ayarlanmış değil - ben vardı diğer ortak sorunu hep diziler veya yapılar yükler parametreleri kadar tamamlamayı olması. (http://stackoverflow.com/questions/1027745/having-trouble-getting-my-head-around-soap-in-php/1027852#1027852 bakınız)

Emin değilim bu kadar yardım, sadece bazı düşünceler olduğunu. Orada bakarak değer olabilir PHP ile yazılmış bazı üçüncü taraf Sabun istemci uygulamaları da vardır, ama onlar oldukça çok yavaş olacaktır.