27 Ağustos 2017 Pazar

ServiceHost Sınıfı

Giriş
ServiceHost sınıfı IIS yoksa kullanılan bir sınıftır. Yani WCF sunucu tarafında kullanılır. ServiceHost kendi thread'ini kullanır. Dolayısıyla Open() metodu hemen döner.

Constructor
Şöyle yaparız.
var svh = new ServiceHost(typeof(MyService));
Constructor - Base Uri
Şöyle yaparız.
Uri address1 = new Uri("http://localhost/WFC_Server/");
Uri address2 = new Uri("net.pipe://localhost/WFC_Server/");
ServiceHost svh = new ServiceHost(typeof(MyService), address1,address2);
AddServiceEndPoint metodu
NetNamedPipe
Şöyle yaparız.
svh.AddServiceEndpoint(typeof(IMyService), 
                       new NetNamedPipeBinding(),  new Uri(hostUrl));
Url şöyle olabilir.
"net.pipe://localhost/WFC_Server/MyService.svc"
Eğer constructor içinde base uri verdiysek şöyle olabilir.
"MyService.svc"
MetaData
Eğer constructor içinde base uri verdiysek şöyle yaparız.
svh.AddServiceEndpoint(
  ServiceMetadataBehavior.MexContractName,
  MetadataExchangeBindings.CreateMexHttpBinding(),
  "mex"
);
Aynı şeyi XML ile şöyle yaparız. MetaData Endpoint tanımlanır.
<services>
  <service name="BillingService.BillingService">
    <endpoint address="mex" binding="mexHttpBinding" contract="..." />
    ...
</service>
MetaData Davranışı tanımlanır.
<serviceBehaviors>
  <behavior>
    <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
      ...
  </behavior>
</serviceBehaviors>
includeExceptionDetailInFaults
XML ile şöyle yaparız.
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Close metodu
Şöyle yaparız.
svh.Close();
Description Alanı
wsdl dosyasının sunulabilmesini sağlar. Şöyle yaparız.
//Create Metadata exchange for the service
ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior();
mexBehavior.HttpGetEnabled = true;
svh.Description.Behaviors.Add(mexBehavior);
Şöyle yaparız.
ServiceMetadataBehavior mexBehavior = svh.Description.Behaviors
 .Find<ServiceMetadataBehavior>();
Open metodu
Şöyle yaparız.
svh.Open();
UnknownMessageReceived Event'i
Şöyle yaparız.
svh.UnknownMessageReceived += OnUnknownMessageReceived;
Event handler şöyledir.
void OnUnknownMessageReceived(object sender, UnknownMessageReceivedEventArgs e)
{
  LogFile.Instance().Append(e.Message.ToString());
}


Hiç yorum yok:

Yorum Gönder