Selamlar,
Bildiğiniz gibi WCF servislerini farklı ortamlarda host edebilirsiniz.
Biz şirket içinde yazdığımız wcf servisleri genelde IIS sunucularında yayınlıyoruz.
Hemen hemen her devreye alımda da endpoint’lerin URI’ları konusunda sorunlar yaşıyoruz J
Burada bilinmesi ve dikkat edilmesi gereken en önemli nokta; IIS servisin svc dosyasını base olarak kabul etmektedir.
Dolayısıyla web.config dosyasına baseaddress eklememeliyiz.
Örnek servis ve client configleri ile konu daha iyi anlaşılacaktır.
Hem netTcp hem de basicHttp binding destekleyen bir servisimiz olsun.
IIS’te basicHttp için 8018, netTcp için 8019 portlarını ayarladık. Svc dosyamızın ismi DistributedService.Wcf.ScheduledJobsService.svc şeklinde ve herhangi bir sub folder’ın altında değil.
Birden fazla endPoint tanımladığımız için bunların relative adreslerini de belirtmemiz gerekiyor. netTcp için address kısmına netTcpAdres diye bir giriş yaptım. Servis referans olarak eklenebilmesi için mexTcpBinding eklendi ve ona da özel bir adres atandı (mexTcpAdres).
<system.serviceModel>
<services>
<service behaviorConfiguration="Basic_Service_Behavior" name="DistributedService.Wcf.ScheduledJobsService">
<endpoint address="netTcpAdres" binding="netTcpBinding" bindingConfiguration="ScheduledJobsServiceBinding" contract="DistributedService.Contracts.Interfaces.IScheduledJobsService"/>
<endpoint address="mexTcpAdres" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ScheduledJobsServiceBindingHttp" contract="DistributedService.Contracts.Interfaces.IScheduledJobsService"/>
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Basic_Service_Behavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="ScheduledJobsServiceBinding" maxReceivedMessageSize="900000000" receiveTimeout="00:15:00" sendTimeout="00:15:00">
<reliableSession inactivityTimeout="15:00:00"/>
</binding>
</netTcpBinding>
<basicHttpBinding>
<binding name="ScheduledJobsServiceBindingHttp" maxReceivedMessageSize="900000000" receiveTimeout="00:15:00" sendTimeout="00:15:00"/>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Visual Studio’da bir test projesi yarattık ve service referans olarak ekleme yaptık.
Oluşan config dosyası şu şekilde:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IScheduledJobsService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="NetTcpBinding_IScheduledJobsService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://testapp.bimar.com:8019/DistributedService.Wcf.ScheduledJobsService.svc/netTcpAdres"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IScheduledJobsService"
contract="ServiceReference1.IScheduledJobsService" name="NetTcpBinding_IScheduledJobsService">
<identity>
<servicePrincipalName value="host/ testapp.bimar.com" />
</identity>
</endpoint>
<endpoint address="http:// testapp.bimar.com:8018/DistributedService.Wcf.ScheduledJobsService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IScheduledJobsService"
contract="ServiceReference1.IScheduledJobsService" name="BasicHttpBinding_IScheduledJobsService" />
</client>
</system.serviceModel>
Renkli kısımlarda gördüğünüz gibi;
Baseadress olarak svc dosyası görünüyor. BasicHttp için özel bir adres vermemiştik. netTcp için verdiğimiz özel adres (netTcpAdres) base adrese eklenmiş durumda.
Konuyla ilgili aşağıdaki linkleri de inceleyebilirsiniz.
İyi Çalışmalar
Serkan
Hiç yorum yok:
Yorum Gönder