【发布时间】:2017-12-18 11:07:56
【问题描述】:
这是我的情况:
- 我有一个基类和 70 个交付的类,它们继承自 这个。
- 我正在实现 WCF 命名管道,这 70 个类将是 客户。
- 需要异步接收和发送数据
对于第三篇文章,我使用[CallbackBehaviorAttribute(ConcurrencyMode = ConcurrencyMode.Multiple)] 属性,当我将它插入到交付的课程中时它可以工作。但是我应该在基类上插入属性,我不会花时间在所有交付的类上插入新属性或删除现有属性。但是当我插入基类时,它不能异步工作。因为CallbackBehaviorAttribute不是继承属性。
那么我该如何解决我上面提到的问题呢?我试图创建一个继承自CallbackBehaviorAttribute 的新属性,但它是密封的。
客户代码:
[CallbackBehaviorAttribute(ConcurrencyMode = ConcurrencyMode.Multiple)]
public abstract partial class BaseService : IDownloaderCallbackService
{
public void connect_server_manager()
{
string address = "net.pipe://localhost/servermanager/";
var factory = new DuplexChannelFactory<IDownloaderServiceContract>(new InstanceContext(this), new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), new EndpointAddress(address));
server_manager = factory.CreateChannel();
logger.Info("Client Connected");
logger.Info(string.Format(server_manager.Ping(this.this_service_id, new byte[1] { 0012 })));
logger.Info(string.Format(server_manager.SetLastRequstTime(this.this_service_id, DateTime.Now)));
}
}
服务器代码:
string address = "net.pipe://localhost/servermanager/";
serviceHost = new ServiceHost(service_manager);
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
serviceHost.AddServiceEndpoint(typeof(IDownloaderServiceContract), binding, address);
serviceHost.Open();
Console.WriteLine("ServiceHost running. Press Return to Exit");
IDownloaderService合同代码:
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IDownloaderCallbackService))]
public interface IDownloaderServiceContract
{
[OperationContract]
string Ping(uint service_id, byte[] p);
[OperationContract]
string Pong(uint service_id, byte[] p);
[OperationContract]
dynamic SetLastRequstTime(uint service_id, dynamic data);
}
【问题讨论】:
标签: c# wcf asynchronous named-pipes