1. Web Referansımızı WSDL ile her zaman yaptığımız standar şekilde oluşturuyoruz. Diyelim ki web referansımızın adı WR, web servisimizin adı SERVIS olsun...
2. Güvenlik için sorulan http authentication bilgilerini wermek için .net tarafından oluşturulan proxy class'ın bir metodunu override etmemiz gerekecek. Bunu tabi ki üretilen proxy class'ın içinde de yapabiliriz ama herhangi bir update yaptığımızda kodumuzun silinmemesi için sub-classing yapmak daha doğru. Bu sebeple yeni bir class oluşturuyoruz.
3. Yeni oluşturduğumuz class'ın içine şu kodu yazıyoruz:
public class GuvenliServis : WR.SERVIS
{
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)base.GetWebRequest(uri);
if (PreAuthenticate)
{
NetworkCredential networkCredentials = Credentials.GetCredential(uri, "Basic");
if (networkCredentials != null)
{
byte[] credentialBuffer = new UTF8Encoding().GetBytes(networkCredentials.UserName + ":"+networkCredentials.Password);
request.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);
}
else
{
throw new ApplicationException("No network credentials");
}
}
return request;
}
}
4. Artık web servisini kullandığımız kodumuz içinde proxy class'ı değil, yeni oluşturduğumuz sub-class'ı çağıracağız. Kullanıcı adı ve şifreyi de şöyle belirteceğiz:
GuvenliServis Gs = new SERVIS();
NetworkCredential netCredential = new NetworkCredential("
Uri uri = new Uri(es.Url);
ICredentials credentials = netCredential.GetCredential(uri, "Basic");
Gs.Credentials = credentials;
Gs.PreAuthenticate = true;
Gs.<ÇağırmakİstediğinizMetod>();
Bu arada giden gelen SOAP mesajlarını kontrol etmek için YATT isimli araç kullanılabilir.
Hiç yorum yok:
Yorum Gönder