В настоящее время я пытаюсь использовать 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());
}
Ниже приведен пример кода для вызова веб-сервиса с помощью 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
{
}
}
Извините за задержку с ответом.
Решение, которое я выбрал, состояло в том, чтобы использовать ссылку на службу и добавить заголовки в файл 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>