Исключение связи с Windows Phone 7 и PHP Web Service
У меня есть веб-сервис PHP, построенный с библиотекой NuSOAP. Я адаптировал веб-сервис для работы с Windows Phone, и все выглядит нормально.
Проблема в том, что когда я получаю ответ, я получаю сообщение CommunicationException. Я думаю, что это URL-адрес конечной точки, которая не распознает? WSDL.
Я искал информацию об этом, но я не могу найти ничего, чтобы решить это.
Мой код выглядит следующим образом:
private void button1_Click(object sender, RoutedEventArgs e)
{
var test = new TS.TestWSDLPortTypeClient();
test.sumarCompleted += test_sumarCompleted;
test.sumarAsync(3, 4);
}
void test_sumarCompleted(object sender, TS.sumarCompletedEventArgs e)
{
MessageBox.Show(e.Result.ToString();
}
И мой.ClientConfig
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="TestWSDLBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://192.168.1.38/ws_test.php" binding="basicHttpBinding"
bindingConfiguration="TestWSDLBinding" contract="TestWSDL.TestWSDLPortType"
name="TestWSDLPort" />
</client>
</system.serviceModel>
</configuration>
Я также проверил:
<endpoint address="http://192.168.1.38/ws_test.php?wsdl"...
Я также проверил с доменным именем, IP: 127.0.0.1, другие порты и т. Д.
Код PHP:
#Declaración del servidor nusoap
$server = new soap_server();
$server->configureWSDL("TestWSDL","urn:TestWSDL", "http://libreriacloud.sytes.net/ws_monster/ws_test.php?wsdl");
$server->soap_defencoding = 'UTF-8';
#Registro de la Funcion Sumar
$server->register(
'sumar',
array(
'x' => 'xsd:int',
'y' => 'xsd:int'
),
array('return' => 'xsd:int'),
'urn:TestWSDL',
'urn:TestWSDL/sumar',
'document',
'literal',
'Suma dos datos'
);
function sumar($x, $y)
{
return $x+$y;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
URL WSDL: http://libreriacloud.sytes.net/ws_monster/ws_test.php
2 ответа
Я решил свою проблему. Вместо "документа", чтобы "поставить" документ ", потому что он видел в SVC, я с ума сошел, чтобы найти ответ, в конце концов, пошел методом проб и ошибок.
Серверный код решения:
#Declaración del servidor nusoap
$server = new soap_server();
$server->configureWSDL("TestWSDL","urn:TestWSDL", "http://libreriacloud.sytes.net/ws_monster/ws_test.php?wsdl");
$server->soap_defencoding = 'UTF-8';
#Registro de la Funcion Sumar
$server->register(
'sumar',
array(
'x' => 'xsd:int',
'y' => 'xsd:int'
),
array('return' => 'xsd:int'),
'urn:TestWSDL',
'urn:TestWSDL/sumar',
'',
'literal',
'Suma dos datos'
);
function sumar($x, $y)
{
return $x+$y;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
Это то же самое, но под
'urn:TestWSDL/sumar',
Я ставлю одинарные кавычки
Кажется, у вас есть некоторый контроль над веб-сервисом. Если это так, я бы держался подальше от SOAP и пошел бы к более простому технологическому стеку, например, REST с JSON. Зачем? Потому что WCF мощный, но сложный для отладки / настройки и т. Д.
Есть много хороших библиотек для работы с JSON в.NET: http://json.codeplex.com/ и для REST, если вам нужно больше, чем WebClient / WebRequest): http://restsharp.org/
Извините, если это не тот ответ, который вы ожидали, но я много работал с WCF, чтобы знать, когда НЕ использую его.