자체 호스팅 WCF 서비스 및 WPF 클라이언트를 사용하여 클라이언트-서버 아키텍처를 구축하는 방법은 무엇입니까?
11370 단어 programmingwpfdevopswcfservice
자체 호스팅 WCF 서비스란?
자체 호스팅은 서비스를 호스팅하는 가장 간단한 방법이며 자체 호스팅은 콘솔 응용 프로그램 또는 창 양식 등이 될 수 있는 응용 프로그램에서 서비스를 호스팅하는 것입니다.
WCF 서비스를 호스팅하는 방법.
WCF 서비스에는 두 가지 유형의 영역이 있습니다.
서비스
라이브 서비스를 생성하기 위한 몇 가지 단계입니다.
클라이언트
WCF 클라이언트와 서비스 간에 통신하는 세 단계가 있습니다.
이제 프로젝트를 만드는 단계를 살펴보겠습니다.
1 단계
Visual Studio를 열고 새 프로젝트를 만듭니다. 프로젝트 생성 후 솔루션 탐색기를 열고 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 추가 -> 새 항목 ->을 클릭하고 WCF 서비스 라이브러리를 선택하면 여기에 두 개의 파일이 생성됩니다. CompanyClass와 ICompanyClass는 이 두 파일입니다.
2 단계
이제 서비스 계약과 데이터 계약을 추가할 수 있습니다. 운영 계약에 대한 서비스 계약 및 데이터 구성원에 대한 데이터 계약.
다음은 회사 클래스 모델입니다.
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceWCFExample
{
[DataContract]
publicclassCompanyClass
{
[DataMember]
publicstring CompanyName { get; set; }
[DataMember]
publicstring Address { get; set; }
[DataMember]
publicintCompanyYear{ get; set; }
publicCompanyClass()
{
}
}
}
이제 서비스 계약 및 운영 계약을 추가합니다.
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.ServiceModel;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceWCFExample
{
[ServiceContract]
publicinterfaceICompanyService
{
[OperationContract]
IList<companyclass>companyClasses();
[OperationContract]
voidUpdate(CompanyClass cc);
}
}
</companyclass>
자세히 보기: What Are The Different Ways Of Binding In Wpf?
단계: 3
이제 클래스에 서비스를 구현해야 합니다.
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceWCFExample
{
publicclassAddServices :ICompanyService
{
static List<companyclass>companyClasses = new List<companyclass>()
{
newCompanyClass() {CompanyName="Ifour", Address="Thaltej", CompanyYear=30},
newCompanyClass() {CompanyName="TCS", Address="AgoraMall", CompanyYear=20},
newCompanyClass() {CompanyName="Tencent", Address="S.G.Highway", CompanyYear=10},
newCompanyClass() {CompanyName="TensorFlow", Address="Sola", CompanyYear=15},
newCompanyClass() {CompanyName="Stridly", Address="Shivranjani", CompanyYear=14},
};
publicvoidUpdate(CompanyClass cc)
{
var data = companyClasses.FirstOrDefault(s =>s.CompanyName == cc.CompanyName);
if (data!=null)
{
data.Address = cc.Address;
data.CompanyYear = cc.CompanyYear;
}
}
publicIList<companyclass>Classes()
{
returncompanyClasses;
}
}
}
</companyclass></companyclass></companyclass>
usingSystem.ServiceModel;
usingSystem.ServiceModel.Description;
publicstaticvoid Main(string[] args)
{
using (ServiceHost host = newServiceHost(typeof(AddServices)))
{
ServiceMetadataBehaviorserviceMetadata =newServiceMetadataBehavior { HttpGetEnabled = true };
host.Description.Behaviors.Add(serviceMetadata);
host.AddServiceEndpoint(typeof(AddServices), newNetTcpBinding { Security = { Mode = SecurityMode.None } }, nameof(AddServices));
host.Open();
Console.WriteLine("Services are hosted successfully.");
Console.WriteLine("Press any key to stop the services.");
Console.ReadKey();
}
}usingSystem.ServiceModel;
usingSystem.ServiceModel.Description;
publicstaticvoid Main(string[] args)
{
using (ServiceHost host = newServiceHost(typeof(AddServices)))
{
ServiceMetadataBehaviorserviceMetadata =newServiceMetadataBehavior { HttpGetEnabled = true };
host.Description.Behaviors.Add(serviceMetadata);
host.AddServiceEndpoint(typeof(AddServices), newNetTcpBinding { Security = { Mode = SecurityMode.None } }, nameof(AddServices));
host.Open();
Console.WriteLine("Services are hosted successfully.");
Console.WriteLine("Press any key to stop the services.");
Console.ReadKey();
}
}
단계: 4
모든 서비스를 호스팅할 준비가 되었습니다. 이제 프로젝트를 실행하고 서비스가 성공적으로 호스팅되고 하나의 서비스 URL을 얻을 수 있는지 확인하십시오.
이제 클라이언트를 만들고 해당 서비스를 사용하기 위한 WPF 프로젝트를 만들 수 있습니다.
단계: 5
WPF Windows 애플리케이션용 새 프로젝트를 만들고 MVVM 패턴을 사용하여 서비스를 사용합니다.
먼저 WCF Company 서비스를 위한 프록시 채널을 생성해야 합니다. 이 프록시 개체를 사용하여 원하는 서비스 데이터를 얻을 수 있습니다.
프록시를 생성하고 서버에서 데이터를 가져오는 방법을 살펴보겠습니다.
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.ServiceModel;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceWCFExample
{
publicclassProxyService<t>whereT :class
{
private T _GetT;
public T GetT(string path)
{
return _GetT ?? (_GetT = ServiceInstance(path));
}
privatestatic T ServiceInstance(string path)
{
varbindpath = newNetTcpBinding();
bindpath.Security.Mode = SecurityMode.None;
EndpointAddressendpointAddress = newEndpointAddress(path);
returnChannelFactory<t>.CreateChannel(bindpath, endpointAddress);
}
}
}
</t></t>
단계: 6
프록시 채널을 설정한 후 폴더를 생성하고 회사 모델에 대한 뷰 모델 이름을 지정하고 Xaml과 바인딩합니다.
using System;
usingSystem.Collections.Generic;
usingSystem.Collections.ObjectModel;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Input;
namespaceWCFExample.ViewModel
{
publicclassCompanyViewModel
{
privatereadonlyICompanyServicecompanyService;
publicCompanyViewModel()
{
ListData = newObservableCollection<companiesviewmodel>();
varProxyservices = newProxyService<icompanyservice>();
companyService = Proxyservices.GetT("net.tcp://localhost:9950/CompanyService");
var companies = companyService.companyClasses();
foreach (var company in companies)
{
ListData.Add(newCompaniesViewModel(company, this));
}
}
publicObservableCollection<companiesviewmodel>ListData{ get; set; }
publicvoidUpdateProperty(CompaniesViewModelcompaniesViewModel)
{
companyService.Update(companiesViewModel.Model);
}
}
publicclassCommands :ICommand
{
private Action<object> action;
privateFunc<object, bool="">func;
publiceventEventHandlerCanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
publicCommands(Action<object> action, Func<object, bool="">func = null)
{
this.action = action;
this.func = func;
}
publicboolCanExecute(objectparam)
{
returnthis.func == null || this.func(param);
}
publicvoidExecute(object param)
{
this.action(param);
}
}
}
</object,></object></object,></object></companiesviewmodel></icompanyservice></companiesviewmodel>
고도로 숙련된 전문가WPF Developer와 대화를 원하십니까? 지금 연락하십시오.
단계: 7
이제 회사의 모든 세부 정보를 나타내는 보기 모델을 하나 더 추가합니다. 이 뷰 모델에서 우리는 즉각적인 업데이트를 위해 INotifyPropertyChanged를 암시합니다.
usingJetBrains.Annotations;
using System;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Linq;
usingSystem.Runtime.CompilerServices;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceWCFExample.ViewModel
{
publicclassCompaniesViewModel :INotifyPropertyChanged
{
public Commands EventHandler{ get; privateset; }
privatereadonlyCompanyViewModel _base;
privatestring address;
privateint year;
publicCompanyClass Model;
publicstring Address
{
get{ return address; }
set
{
if(address != value)
{
address = value;
Model.Address = value;
_base.UpdateProperty(this);
OnPropertyChanged(nameof(Address));
}
}
}
publicint Year
{
get{ return year; }
set
{
if(year != value)
{
year = value;
Model.CompanyYear = value;
_base.UpdateProperty(this);
OnPropertyChanged(nameof(Year1));
OnPropertyChanged(nameof(Year2));
OnPropertyChanged(nameof(Year3));
OnPropertyChanged(nameof(Year4));
OnPropertyChanged(nameof(Year5));
}
}
}
publicbool Year1 =>Model.CompanyYear>= 30;
publicbool Year2 =>Model.CompanyYear>= 20;
publicbool Year3 =>Model.CompanyYear>= 10;
publicbool Year4 =>Model.CompanyYear>= 15;
publicbool Year5 =>Model.CompanyYear>= 14;
publicCompaniesViewModel(CompanyClass company, CompanyViewModel companies)
{
Model = company;
EventHandler = new Commands(OnClickYear);
_base = companies;
address = company.Address;
year = company.CompanyYear;
}
privatevoidOnClickYear(objectobj)
{
this.Year = int.Parse(obj.ToString());
}
publiceventPropertyChangedEventHandlerPropertyChanged;
[NotifyPropertyChangedInvocator]
protectedvirtualvoidOnPropertyChanged([CallerMemberName] stringpropertyName = null)
{
PropertyChanged?.Invoke(this, newPropertyChangedEventArgs(propertyName));
}
}
}
결론
WCF의 자체 호스팅은 사용하기 쉽습니다. 몇 줄의 코드를 사용하여 서비스를 실행하고 Service Host의 Open() 및 Close() 메서드를 통해 서비스를 제어할 수 있습니다. Window Communication Foundation은 .NET 프레임워크를 위한 안정적이고 안전하며 확장 가능한 메시징 플랫폼이며 보안, 데이터 계약, 서비스 지향, 트랜잭션 등과 같은 다른 기능을 가지고 있습니다.
Reference
이 문제에 관하여(자체 호스팅 WCF 서비스 및 WPF 클라이언트를 사용하여 클라이언트-서버 아키텍처를 구축하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tarungurang/how-to-build-the-client-server-architecture-using-self-hosted-wcf-service-and-wpf-client-5ddd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)