x.For<ISettingService>().Singleton().Use(() => new SettingService());
public SettingService(IUnitOfWork uow) { _uow = uow; }
x.For<ISettingService>().Singleton().Use(() => new SettingService());
public SettingService(IUnitOfWork uow) { _uow = uow; }
install-package WcfRestContrib
[ServiceContract] public interface IBooksService { [OperationContract] void AddBook(string isbn, Book book); }
[ServiceContract] public interface IBooksService { [WebInvoke(UriTemplate = "/{isbn}", Method=Verbs.Put)] [WebDispatchFormatter] [OperationContract] void AddBook(string isbn, Book book); .... }
[WebDispatchFormatterConfiguration("application/xml")] [WebDispatchFormatterMimeType(typeof(WcfRestContrib.ServiceModel.Dispatcher.Formatters.PoDataContract), "application/xml", "text/xml")] [WebDispatchFormatterMimeType( typeof(WcfRestContrib.ServiceModel.Dispatcher.Formatters.DataContractJson), "application/json")] [WebDispatchFormatterMimeType( typeof(WcfRestContrib.ServiceModel.Dispatcher.Formatters.FormUrlEncoded), "application/x-www-form-urlencoded")] public class Books : IBooksService { public void AddBook(string isbn, Book book) { } }
<system.serviceModel> <extensions> <behaviorExtensions> <add name="webFormatter" type="WcfRestContrib.ServiceModel.Configuration.WebDispatchFormatter.ConfigurationBehaviorElement, WcfRestContrib, Version=x.x.x.x, Culture=neutral, PublicKeyToken=89183999a8dc93b5"/> </behaviorExtensions> </extensions> <serviceBehaviors> <behavior name="Rest"> <webFormatter> <formatters defaultMimeType="application/xml"> <formatter mimeTypes="application/xml,text/xml" type="WcfRestContrib.ServiceModel.Dispatcher.Formatters.PoxDataContract, WcfRestContrib"/> <formatter mimeTypes="application/json" type="WcfRestContrib.ServiceModel.Dispatcher.Formatters.DataContractJson, WcfRestContrib"/> <formatter mimeTypes="application/x-www-form-urlencoded" type="WcfRestContrib.ServiceModel.Dispatcher.Formatters.FormUrlEncoded, WcfRestContrib"/> </formatters> </webFormatter> </behavior> </serviceBehaviors> </system.serviceModel>
[WebDispatchFormatter(WebDispatchFormatter.FormatterDirection.Outgoing)]
http://services.odata.org/OData/OData.svc/Category(1)/Products?$top=2&$orderby=name \_______________________________________/ \__________________/ \__________________/ | | | service root URL resource path query options
http://services.odata.org/OData/OData.svc/Products
http://services.odata.org/OData/OData.svc/Products(1)/Supplier
http://services.odata.org/OData/OData.svc/Products/MostExpensive
http://services.odata.org/OData/OData.svc/GetProductsByCategoryId(categoryId=2)
http://services.odata.org/OData/OData.svc/Products(1)/Name
//filter http://services.odata.org/OData/OData.svc/Products?$filter=Name eq 'Milk' //orderby http://services.odata.org/OData/OData.svc/Products?$orderby=Name //skip http://services.odata.org/OData/OData.svc/Products?$skip=5 //top http://services.odata.org/OData/OData.svc/Products?$top=10 //expand http://services.odata.org/OData/OData.svc/Products?$expand=Category
سپس روی Web Site ایجادشده راست کلیک کنید و از منوی بازشده Property Pages را انتخاب کنید. روی گزینهی Add Reference کلیک کنید، سپس پروژهی MyNewsWCFLibrary را از قسمت Solution انتخاب کرده و دکمهی OK را بفشارید.
دکمهی OK را بفشارید و از Solution Explorer فایل Web.Config را باز کنید. پیش از تغییرات مد نظر باید چنین محتوایی داشته باشد:
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
متن آنرا به این صورت تغییر دهید:
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> <system.serviceModel> <serviceHostingEnvironment> <serviceActivations> <add factory="System.ServiceModel.Activation.ServiceHostFactory" relativeAddress="./HamedService.svc" service="MyNewsWCFLibrary.MyNewsService"/> </serviceActivations> </serviceHostingEnvironment> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
همانگونه که مشاهده میکنید به وسیلهی تگ add factory سرویسها را به وبسایت معرفی میکنیم. با relativeAddress میتوانیم هر نامی را به عنوان نام سرویس که در URL قرار میگیرد معرفی کنیم. چنانکه من یه جای MyNewsService از نام HamedService استفاده کردم. و در صفت service فضای نام و نام کلاس سرویس را معرفی میکنیم.
اکنون پروژه را اجرا کنید. در مرورگر باید صفحه را به اینصورت مشاهده کنید:
نیازی به یادآوری نیست که شما میتوانید این پروژه را در IIS سرور راهاندازی کنید تا کلیهی مشتریها به آن دسترسی داشته باشند. هرچند پیش از آن باید امنیت را نیز در WCF برقرار کنید.
توجه داشته باشید که روشی که در این بخش به عنوان میزبانی WCF مطرح کردم یکی از روشهای میزبانی WCF است. مثلاً شما میتوانستید به جای ایجاد یک WCFLibrary و یک Web Site به صورت جداگانه یک پروژه از نوع WCF Service و یا Web Site ایجاد میکردید و سرویسها و مدل Entity Framework را به طور مستقیم در آن میافزودید. روشی که در این درس از آن بهره برده ایم البته مزایایی دارد از جمله اینکه خروجی پروژه فقط یک فایل DLL است و با هر بار تغییر فقط کافی است همان فایل را در پوشه Bin از وبسایتی که روی سرور میگذارید کپی کنید.
در بخش هشتم با هم یک پروژهی تحت ویندوز خواهیم ساخت و از سرویس WCF ای که ساخته ایم در آن استفاده خواهیم کرد.