Вы можете использовать следующий код, чтобы заменить «~ /» для абсолютирования URL.
System.Web.VirtualPathUtility.ToAbsolute("~/")
Редактировать:
Сначала нужно определить метод.
public static string ResolveServerUrl(string serverUrl, bool forceHttps)
{
if (serverUrl.IndexOf("://") > -1)
return serverUrl;
string newUrl = serverUrl;
Uri originalUri = System.Web.HttpContext.Current.Request.Url;
newUrl = (forceHttps ? "https" : originalUri.Scheme) +
"://" + originalUri.Authority + newUrl;
return newUrl;
}
Теперь вызов этого метода вернет полный URL-адрес освобождения.
ResolveServerUrl(VirtualPathUtility.ToAbsolute("~/images/image1.gif"),false))
Выход будет http://www.yourdomainname.com/images/image1.gif
попробуйте это,
$client->__soapCall('methodName',array('requestObj'=>$requestObj));
Работая сегодня над слегка связанной проблемой, я обнаружил, что следующий PHP генерирует запрос SOAP, показанный ниже:
$sc = new SoapClient($url);
$params = array('step' => 'ShippingInfo', 'value' => "hello");
$result = $sc->__soapCall('runStep', array('parameters' => $params));
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
<SOAP-ENV:Body>
<ns1:runStep>
<ns1:step>ShippingInfo</ns1:step>
<ns1:value>hello</ns1:value>
</ns1:runStep>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Я обнаружил, что если параметры ($ params) я передал не соответствует тому, что было указано в файле WSDL, сообщение, созданное клиентом SOAP, будет похоже на то, на которое вы жалуетесь - сообщение с телом не содержит значения данных. Интересно, здесь ли кроется ваша проблема.
Также обратите внимание на то, как PHP выше использует два массива для передачи параметров. Первый массив содержит параметры и их имена. Второй содержит первый массив. Я знаю, интересный синтаксис. : -)
К вашему сведению, приведенный выше пример кода используется для связи со службой C # .Net WCF, имеющей следующий контракт:
[OperationContract]
string runStep(string step, string value);