Здесь у меня есть 2 метода из 15+, которые вызывают веб-службу SOAP
public async void CallWebServiceA() {
var client = new WebServiceWRGClient();
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.MaxReceivedMessageSize = Int32.MaxValue;
binding.MaxBufferSize = Int32.MaxValue;
var endpoint = new EndpointAddress("https://trustonline.delawarecpf.com/tows/webservicewrg.svc");
var channelFactory = new ChannelFactory<WebServiceWRG>(binding, endpoint);
var webService = channelFactory.CreateChannel();
var user = new GRACE_GRACES.User();
user.UserName = await webService.EncryptValueAsync("username");
user.Password = await webService.EncryptValueAsync("password12345");
var response = await client.ClaimSearchAsync(user, "", "", 12345, GRACE_GRACES.statuscode.NotSet, "");
}
public async void CallWebServiceB() {
var client = new WebServiceAWIClient();
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.MaxReceivedMessageSize = Int32.MaxValue;
binding.MaxBufferSize = Int32.MaxValue;
var endpoint = new EndpointAddress("https://trustonline.delawarecpf.com/tows/webserviceawi.svc");
var channelFactory = new ChannelFactory<WebServiceAWI>(binding, endpoint);
var webService = channelFactory.CreateChannel();
var user = new ARM_ARMS.User();
user.UserName = await webService.EncryptValueAsync("username");
user.Password = await webService.EncryptValueAsync("password12345");
var response = await client.ClaimSearchAsync(user, "", "", 12345, ARM_ARMS.statuscode.NotSet, "");
}
У меня есть этот общий класс ниже, который я создал, поэтому мне не нужно создавать несколько избыточных методов для каждого извсе мои 15+ URL / веб-сервисов от одного и того же провайдера, но у меня есть некоторые ошибки при передаче второго параметра, который является интерфейсом (из ссылки на веб-сервис).
public class WebService<T1, T2, T3> {
private T1 _client;
private T2 _interface;
private T3 _user;
public WebService(T1 wsClient, T2 wsInterface, T3 wsUser) {
_client = wsClient;
_interface = wsInterface;
_user = wsUser;
}
public void CallWebService(string url, string userName, string password) {
var client = _client;
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
var endpoint = new EndpointAddress(url);
var channelFactory = new ChannelFactory<_interface>(binding, endpoint);
var webService = channelFactory.CreateChannel();
var user = _user;
user.UserName = webService.EncryptValue(userName);
user.Password = webService.EncryptValue(password);
var response = client.ClaimSearch(user, "", "", 12345, GraceStatuscode.NotSet, "");
}
}
Я звонюкак это показано ниже, но интерфейсы WebServiceWRG и WebServiceAWI не распознаются в параметрах при создании экземпляра или в методе при создании нового экземпляра ChannelFactory.Я получаю красную строку, говорящую «тип имени пространства имен _interface не может быть найден», и в строке, где я создаю новый экземпляр класса, я получаю красную линию для каждого параметра интерфейса, говорящего «WebServiceWRG» - это тип, который не являетсядопустимо в данном контексте "
WebService someServiceA = new WebService(new WebServiceWRGClient(), WebServiceWRG, new GRACE_GRACES.User());
WebService someServiceB = new WebService(new WebServiceAWIClient(), WebServiceAWI, new ARM_ARMS.User());
ОБНОВЛЕНО Вот что я пробовал ниже, но все еще есть ошибки: user.UserName = webService.EncryptValue (userName);// TTwo не содержит def для 'UserName', T не содержит def для EncryptValue
public class Test {
public void TestWebService() {
var ws = new WebService<WebServiceWRG>();
ws.SearchClaim(new WebServiceWRGClient(), new GraceUser(), "url", "userName", "password");
}
}
public class WebService<T> {
public void SearchClaim<TOne, TTwo>(TOne entity1, TTwo entity2, string url, string userName, string password)
where TOne : class
where TTwo : class
{
var client = entity1;
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
var endpoint = new EndpointAddress(url);
var channelFactory = new ChannelFactory<T>(binding, endpoint);
var webService = channelFactory.CreateChannel();
var user = entity2;
user.UserName = webService.EncryptValue(userName); // username not found, encryptvalue not found
user.Password = webService.EncryptValue(password); // passwordnot found, encryptvalue not found
var response = client.ClaimSearch(user, "", "", 12345, GraceStatuscode.NotSet, ""); // claimsearch not found
}
}