1、OperationContract
[ServiceContract(CallbackContract = typeof(ITradingPlatformServiceCallBack))]
public interface ITradingPlatformService
{
[OperationContract(IsOneWay = false)]
string Hello();
[OperationContract(IsOneWay = false)]
void AskProjuctDetail();
}
public interface ITradingPlatformServiceCallBack
{
[OperationContract(IsOneWay = false)]
void SendProjectDetail(Product in_ProjectDetails);
}
2、DataContract
[DataContract]
public class Product
{
public string ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Price { get; set; }
[DataMember]
public string Quality { get; set; }
}
3、Service
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
public class TradingPlatformService : ITradingPlatformService
{
public string Hello()
{
return "Yes,I'm Online";
}
public void AskProjuctDetail()
{
ITradingPlatformServiceCallBack serviceCallBack =
OperationContext.Current.GetCallbackChannel<ITradingPlatformServiceCallBack>();
Product product = new Product();
product.ID = Guid.NewGuid().ToString();
product.Name = "铁门";
product.Price = "600";
product.Quality = "Normal Iron";
serviceCallBack.SendProjectDetail(product);
}
}
public class TradingPlatformServiceCallBack : ITradingPlatformServiceCallBack
{
public void SendProjectDetail(Product in_Product)
{
Console.WriteLine(string.Format("商品名称:{0},商品价格:{1},商品质量:{2}", in_Product.Name, in_Product.Price, in_Product.Quality));
}
}
4、ServiceHost
public class ServiceManager
{
private static ServiceHost m_ServiceHost;
public void StartService()
{
if (m_ServiceHost == null)
{
m_ServiceHost = new ServiceHost(typeof(TradingPlatformService));
EndpointAddress address = new EndpointAddress("net.tcp://127.0.0.1:9999/TradingPlatformService");
ContractDescription contractDescription = ContractDescription.GetContract(typeof(ITradingPlatformService));
Binding netTcpBinding = new NetTcpBinding();
ServiceEndpoint serviceEndpoint = new ServiceEndpoint(contractDescription,netTcpBinding,address);
m_ServiceHost.AddServiceEndpoint(serviceEndpoint);
}
if(m_ServiceHost.State==CommunicationState.Created)
{
m_ServiceHost.Open();
Console.WriteLine("Server is running");
Console.Read();
}
}
}
5、Client
InstanceContext instanceContext = new InstanceContext(new TradingPlatformServiceCallBack());
Binding netTcpBinding = new NetTcpBinding();
EndpointAddress address = new EndpointAddress("net.tcp://127.0.0.1:9999/TradingPlatformService");
ContractDescription contractDescription = ContractDescription.GetContract(typeof(ITradingPlatformService));
ServiceEndpoint serviceEndpoint = new ServiceEndpoint(contractDescription, netTcpBinding, address);
DuplexChannelFactory<ITradingPlatformService> channelFactory = new DuplexChannelFactory<ITradingPlatformService>(instanceContext, serviceEndpoint);
ITradingPlatformService tradingPlatformService = channelFactory.CreateChannel();
string sResult = tradingPlatformService.Hello();
if(sResult!="")
{
tradingPlatformService.AskProjuctDetail();
Console.Read();
}