В настоящее время я пытаюсь вызвать веб-службу PHP в c #. Я пробовал десятки решений, которые я нашел в Интернете, но без везения, и ни у кого нет такой же проблемы, как у меня. Я незнаком с PHP.
Я могу успешно вызвать authenticate_get из моего c #
string auth_id = client.authenticate_get("www.testexample.com", "e5d30c56d600a7456846164");
и вернуть идентификатор аутентификации, но затем не знаю, как передать массив в c #. Вот пример PHP.
<?php $client = new SoapClient("https://example.com/TESTApi_v1_1.wsdl.php"); $auth_id = $client->authenticate_get('username', 'password'); $client = new SoapClient("https://example.com/TESTApi_v1_1.wsdl.php", array("login" => $auth_id )); ?>
Когда я пытаюсь вызвать любые другие методы, я просто получаю сообщение об ошибке «Требуется основной заголовок HTTP».
Я также пробовал:
Uri uri = new Uri(url); ICredentials credentials = netCredential.GetCredential(uri, "Basic login:" + auth_id); client.Credentials = credentials; client.PreAuthenticate = true;
Я также пытался:
public class MyHeader : SoapHeader { public string login; } [WebService(Namespace = "https://example.com/TESTApi_v1_1.wsdl.php")] public class exampleTestService : ExampleService { public MyHeader myOutHeader; [WebMethod] [SoapHeader("login", Direction = SoapHeaderDirection.InOut)] public MyHeader MyOutHeaderMethod() { var client = new ExampleService(); string auth_id = client.authenticate_get("www.testexample.com", "e5d30c56d600a7e6f3cef05d8c0a1991"); // Return the client's authenticated name. MyHeader outHeader = new MyHeader(); outHeader.login = auth_id; return outHeader; } }
Я уверен, что мне не хватает чего-то простого.
Спасибо заранее за любую помощь.
У меня это работает. В случае, если кто-то может найти мой ответ полезным:
public partial class TheWebServiceSubClass : ExampleService { protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri); ExampleService client = new ExampleService(); string auth_id = client.authenticate_get("www.testexample.com", "e5d30c56d600a7456846164"); string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("www.testexample.com:e5d30c56d600a7456846164")); string credentials1 = Convert.ToBase64String(Encoding.ASCII.GetBytes(auth_id+ ":")); webRequest.Headers["Authorization"] = "Basic " + credentials1; return webRequest; } }