a

ABLY مقالات و مطالب مجموعه

ایجاد یک WCF Service بدون فایل های Config

ایجاد یک WCF Service بدون فایل های Config

در این مقاله به شما یاد خواهیم داد که چگونه میتوان یک WCF Service بدون فایل های Config ایجاد کرد. با ما همراه باشید.

wcf service without config file

در ابتدا باید اشاره کنیم که برای ایجاد WCF Service چندین مرحله وجود دارد:

  1. Server Side: ایجاد یک ServiceHost جدید برای ایجاد یک WCF Service
  2. Client Side: اطمینان حاصل کنید که نام مشتری (گیرنده)، به طور صحیح در منبع مشتری (گیرنده) ثبت شده است.
  3. Make Sure: مطمئن شوید که فایل های Config هر دو طرف (گیرنده/سرور) به درستی تنظیم شده باشد.

میدانیم که هرگونه خطای املایی می تواند چند ساعت تحقیق را از بین ببرد. اما شما با استفاده از چند قوانین StackOverFlow می توانید این خطاها را به حداقل برسانید.


protected Dictionary GetBehaviors(string name)  
{  
    if (!_behaviorCache.ContainsKey(name))  
    {  
        BehaviorsSection behaviorData = ConfigurationManager.GetSection("system.serviceModel/behaviors") as BehaviorsSection;  
        List behaviors = new List();  
  
        if (behaviorData.ServiceBehaviors.ContainsKey(name))  
        {  
            behaviorData.ServiceBehaviors[Title].All(e =>  
            {  
                behaviors.Add(e);  
                return true;  
            });  
        }  
  
        if (behaviorData.EndpointBehaviors.ContainsKey(name))  
        {  
            behaviorData.EndpointBehaviors[Title].All(e =>  
            {  
                behaviors.Add(e);  
                return true;  
            });  
        }  
  
        _behaviorCache.Add(name, behaviors.ToDictionary(e => e.BehaviorType, e => createBehavior(e)));  
    }  
  
    return _behaviorCache[Title];  
}  
  
private object createBehavior(BehaviorExtensionElement element)  
{  
    return element.GetType().GetMethod("CreateBehavior", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)  
            .Invoke(element, new object[0] { });  
} 




کدی را که در پایین مشاهده می کنید، لیستی از رفتارها با نام رفتار را ایجاد می کند. بنابراین یک ServiceHost می تواند به صورت زیر ایجاد شود:




private ServiceHost getServiceHost(Type serviceType, Type interfaceType)  
{  
    WebServiceAttribute attribute = interfaceType.GetCustomAttribute();  
  
    if (attribute == null)  
        throw new ArgumentException("WebService attribute is missing");  
  
    string serviceUrl = GetServiceUrl(attribute, "localhost");  
    ServiceHost serviceHost = new ServiceHost(serviceType, new Uri(serviceUrl));  
    var serviceMetadataBehavior = new ServiceMetadataBehavior();  
    serviceHost.Description.Behaviors.Add(serviceMetadataBehavior);  
  
    // add behaviors  
    Dictionary behaviors = GetBehaviors(attribute.BehaviorConfiguration);  
    behaviors.All(e =>  
    {  
        serviceHost.Description.Behaviors.Remove(e.Key);  
        serviceHost.Description.Behaviors.Add(e.Value as IServiceBehavior);  
        return true;  
    });  
  
    serviceHost.AddServiceEndpoint(interfaceType, GetBinding(attribute), serviceUrl);  
    return serviceHost;  
} 










سوال اینجاست که اگر تمام اطلاعات را از ویژگی های داده شده (صفت ها) بدست آوریم، می توانیم یک WCF Service ایجاد کنیم؟

 

می توانیم بگوییم "بله"

کد زیر را مشاهده کنید:





public class WebServiceAttribute : Attribute  
{  
    public string RelativePath { get; set; }  
    public Type BaseBinding { get; set; }  
    public string CustomBinding { get; set; }  
    public string BehaviorConfiguration { get; set; }  
    public bool UseCallback { get; set; }  
  
    private static readonly string DEFAULT_BEHAVIOR = "customBehavior";  
    private static readonly string DEFAULT_BINDING = "customWsHttpBinding";  
  
    public WebServiceAttribute()  
    {  
        UseCallback = false;  
        BaseBinding = typeof(WSHttpBinding);  
        CustomBinding = DEFAULT_BINDING;  
        BehaviorConfiguration = DEFAULT_BEHAVIOR;  
    }  
}







حال چگونه از آن استفاده کنیم؟

 

 "کافیست فقط آن را بر روی Web Interface اعمال کنید. همین!




[ServiceContract]    
[WebService(RelativePath = "/myapp/SimpleService/")]    
public interface ISimpleService    
{    
    [OperationContract]    
    void Speak(string words);    
} 



بنابراین می توانید با کمک WebServiceAttribute یک سرویس دهنده را از طریق دات نت ایجاد کنید.

 

 

مطلب مرتبط:

تفاوت بین WPF و WCF

در آخر نیز، می توانید از کلاس WebServiceServerProber برای پیداکردن همه ی سرویس های WCF در یک ماژول خاص و ایجاد ServiceHost استفاده کنید. در حالیکه WebServiceSingleClientProber در سرویس گیرنده برای ایجاد ChannelFactory (کانال ارتباطی سرویس) استفاده می شود.

 

امیدواریم از مقاله بالا لذت کافی را برده باشید

مجموعه ABLY

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :Phone Number
0713 625 1757 :Phone Number