社区
C#
帖子详情
WCF,关于服务端多线程的问题
diablo1003
2007-11-06 11:59:42
偶是WCF的新人。现在有一个状况就是说。客户端会给服务端发请求,然后服务端就要马上将结果返回给客户端。客户端有可能很多,如果过多就要排队。
那WCF在服务端的时候如何才能写成多线程呢?谢谢
在线等哈。
...全文
1473
6
打赏
收藏
WCF,关于服务端多线程的问题
偶是WCF的新人。现在有一个状况就是说。客户端会给服务端发请求,然后服务端就要马上将结果返回给客户端。客户端有可能很多,如果过多就要排队。 那WCF在服务端的时候如何才能写成多线程呢?谢谢 在线等哈。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
monkeyfu
2007-11-09
打赏
举报
回复
to 4楼:
很可能就是beta版本的问题。微软的一贯传统都是会在产品正式release的时候将以前beta版本的命名空间彻底换一遍。。。
lhzyn
2007-11-08
打赏
举报
回复
服务端多线程可以有很多方法去实现
你可以在你的SERVICE LIB 实现类前面加上属性使得服务类对每一个请求都创建一个新的实例去处理.
例如:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BNVII_ClientInfoService : BNVII.ServiceLib.IBNVII_ClientInfoService
{
//实现服务的一些方法......
}
你还可以使用WCF的异步模式来实现服务器的并发处理
例如:
public class SYSLogWrite : BNIV.ServiceLib.ISYSLogWrite
{
public void WriteLogA(LogModel model)
{
try
{
SYSLog sl = new SYSLog();
DoWriteLogHanndler WorkHandler = new DoWriteLogHanndler(sl.DoWriteLog);
AsyncCallback ac = new AsyncCallback(WriteLogComplete);
IAsyncResult ir = WorkHandler.BeginInvoke(model, ac, WorkHandler);
}
catch
{
//throw ex;
}
}
private void WriteLogComplete(IAsyncResult ir)
{
try
{
DoWriteLogHanndler caller = (DoWriteLogHanndler)ir.AsyncState;
caller.EndInvoke(ir);
}
catch
{
//throw ex;
}
}
private delegate void DoWriteLogHanndler(BNIV.Models.LogModel model);
}
你还可以使用多线程或异步编程在一个服务类的实例上实现并发处理
例如:
[ServiceBehaviorAttribute(InstanceContextMode = InstanceContextMode.Single)]
public class TrackService : ITrackService
{
Dictionary<Guid, TracingCallBack> Clients = new Dictionary<Guid, TracingCallBack>();
Dictionary<Guid, TracingCountBLL> TCBs = new Dictionary<Guid, TracingCountBLL>();
public TrackService()
{
Events.TracingBySystemCountEvent += new Events.TracingBySystemCountEventHendler(Events_TracingBySystemCountEvent);
}
void Events_TracingBySystemCountEvent(Guid guid, object TracingCount)
{
if (Clients.ContainsKey(guid))
{
if (TCBs.ContainsKey(guid))
{
try
{
Clients[guid].SendTracingCount((List<BNIV.Models.TracingCountModel>)TracingCount);
}
catch
{
Clients.Remove(guid);
TCBs.Remove(guid);
}
}
}
}
#region ITrackService 成员
TracingCallBack CallBack
{
get
{
return OperationContext.Current.GetCallbackChannel<TracingCallBack>();
}
}
//开始异步处理
public void BeginTracingByServiceCount(Guid UID, int Frequency)
{
lock (Clients)
{
Events.FireShowMessageEvent(string.Format("{0} Begin Tracing.",UID.ToString()));
Clients.Add(UID, CallBack);
//TracingCountBLL会创建一个新的线程去处理客户端请求.
TCBs.Add(UID, new TracingCountBLL(UID, Frequency));
}
}
//处理完成
public void EndTracingByServiceCount(Guid UID)
{
lock (Clients)
{
Events.FireShowMessageEvent(string.Format("{0} End Tracing.", UID.ToString()));
if (Clients.ContainsKey(UID))
{
Clients.Remove(UID);
}
if (TCBs.ContainsKey(UID))
{
TCBs[UID].UnRegisterEvent();
TCBs.Remove(UID);
}
}
}
#endregion
}
diablo1003
2007-11-07
打赏
举报
回复
不知道是什么原因,可能是我的WCF版本问题吧。我用的是Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF).msi
但是,我照着书的列子上写的时候,
报错说
base.InnerProxy.Request(cltMsg);
********************************************************************************************************
错误 2 “System.ServiceModel.DuplexClientBase<IChatDuplex>”并不包含“InnerProxy”的定义 C:\Documents and Settings\Reinhard\My Documents\Visual Studio 2005\Projects\DuplexWin\DuplexWinClient\ChatDuplexProxy.cs 69 14 DuplexWinClient
****************************************************************************************************
我下载了framework3.5 beat2。但是里面只有System.ServiceModel.Web.Dll而不是System.ServiceModel.Dll
请问,该用哪个版本呢?有下载地址么?我没方向了呢。。。。
monkeyfu
2007-11-06
打赏
举报
回复
WCF服务本身就支持并发.
它的多个线程是从服务器端的IOCP的线程池中分配出来,默认县城池大小是1000
wsj1983920
2007-11-06
打赏
举报
回复
??????
wzd24
2007-11-06
打赏
举报
回复
WCF本身就是多线程的。你还要怎么个多线程法?
WCF
文件上传实例
服务端
和客户端
WCF
文件上传实例
服务端
和客户端本人测试可以用
WCF
服务端
程序
C# 使用
WCF
技术开发的
服务端
,包含了对数据库的常用操作,服务寄宿在WINFORM中
基于
WCF
多线程
的SOCKET文件传输服务
基于
WCF
多线程
的SOCKET文件传输服务
Android访问
WCF
服务源码(
WCF
服务端
)
http://blog.csdn.net/btyh17mxy/article/details/7993111的源码
C#
多线程
下载
利用C#
WCF
框架和
多线程
下载文件,此程序为从
服务端
下载的示例
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章