using System;
using System.ServiceModel;
public class SoapClientWrapper<T> : IDisposable where T : ICommunicationObject, IDisposable
{
public SoapClientWrapper(T client) => Client = client;
public T Client { get; private set; }
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (disposedValue || !disposing || Client == null)
return;
try
{
if (Client.State == CommunicationState.Faulted)
Client.Abort();
else
Client.Close();
}
finally
{
Client.Dispose();
}
disposedValue = true;
}
public void Dispose() => Dispose(true);
}
// Example usage:
private static SoapClientWrapper<MyWebserviceSVC> GetSoapClient(string url)
{
var endpoint = new EndpointAddress(url);
var securityMode = endpoint.Uri.Scheme.ToLower().Contains("https:") ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None;
var binding = new BasicHttpBinding(securityMode);
var client = new MyWebserviceSVC(binding, endpoint);
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
//client.ClientCredentials.UserName.UserName = userName;
//client.ClientCredentials.UserName.Password = password;
return new SoapClientWrapper<MyWebserviceSVC>(client);
}
using (var client = GetSoapClient(url))
{
var response = await client.Client.MyWebserviceCallAsync(clientId, clientKey, message, transactionId, exitCode);
return response.Body.ExitCode == "200";
}
public class SoapApi
{
private static WebConnectSoapClient GetSoapClient()
{
var client = new WebConnectSoapClient();
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
//var wsHttpBinding = client.Endpoint.Binding as System.ServiceModel.WSHttpBinding;
//wsHttpBinding.BypassProxyOnLocal = true;
//wsHttpBinding.UseDefaultWebProxy = false;
//wsHttpBinding.ProxyAddress = null;
//client.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["WebserviceUser"];
//client.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["WebservicePassword"];
return client;
}
public static void WebserviceCloseOrAbort(ICommunicationObject communicationObject)
{
if (communicationObject == null)
return;
if (communicationObject.State == CommunicationState.Faulted)
communicationObject.Abort();
else
communicationObject.Close();
}
private static T Execute<T>(Func<WebConnectSoapClient, T> func)
{
using (var client = GetSoapClient())
{
try
{
client.Open();
return func(client);
}
finally
{
WebserviceCloseOrAbort(client);
}
}
}
public async Task<string> GetOrderMessages()
{
string clientId = "";
string clientKey = "";
string message = "";
string transactionId = "";
string exitCode = "";
var response = await Execute((client) => client.M10100Async(clientId, clientKey, message, transactionId, exitCode));
return response.Body.ExitCode;
}
}
283700cookie-checkC# SVC / WCF /Soap Client