Аутентификация SoapHeader в C # (умения)

В настоящее время я пытаюсь использовать SOAP WebService через C #.

WebServices использует некоторую аутентификацию заголовка, я не работаю в C #
Есть некоторый пример PHP-кода, но так как это мой первый SOAP-клиент, я на самом деле не получаю эквивалент C #.

Я надеюсь, что кто-нибудь может сказать мне, как сделать следующее в C #:

$client = new SoapClient("http://api.sendcockpit.com/server.php?wsdl");
class SOAPAuth{
public $userid;
public $apikey;
public $version;
public $mode;
public function __construct($userid, $apikey, $version, $mode = 'test') {
$this--->userid = $userid;
$this->apikey = $apikey;
$this->version = $version;
$this->mode = $mode;
}
}

$auth = new SOAPAuth('User ID','API Key','1.0','test');

$header = new SOAPHeader('sendcockpit', 'validate', $auth);

$client->__setSoapHeaders($header);

try{
//get all subscriber lists from account
$response=$client->apiGetList();
}
catch (SoapFault $exception) {
echo ($exception->getMessage());
}

0

Решение

Ниже приведен пример кода для вызова веб-сервиса с помощью SOAP.

    {
WebRequest request = WebRequest.Create(url); //Pass your Url here
request.Method = "POST";
request.ContentType = "text/xml;charset=UTF-8";
request.Headers[HttpRequestHeader.Authorization] ="Authentication";  //Headers can be added
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}

void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
string postData = postXml;                 //Xml to be posted
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
}

void GetResponseCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response;
response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamResponse);
string Response = streamReader.ReadToEnd();  // Response Xml will be available here
streamResponse.Close();
streamReader.Close();
response.Close();

}
catch
{

}
}
0

Другие решения

Извините за задержку с ответом.

Решение, которое я выбрал, состояло в том, чтобы использовать ссылку на службу и добавить заголовки в файл web.config следующим образом:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="APIServiceBinding" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://api.sendcockpit.com/server.php" binding="basicHttpBinding"bindingConfiguration="APIServiceBinding" contract="Newsletter.APIServicePortType"name="OrdersPort" >
<headers>
<validate>
<apikey>[yourAPIKey]</apikey>
<userid>[yourUserId]</userid>
<version>1.0</version>
<mode>live</mode>
</validate>
</headers>
</endpoint>
</client>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector