简介:今天,首席CTO注释与您分享WCF数据传输最大数据的相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
Windows Communication Foundation(WCF)是一系列应用程序框架,支持Microsoft开发的数据通信,可以将其翻译为Windows通信开发平台。WCF的最终目标是通过过程或不同的系统,通过本地网络或信息。WCF在客户与服务之间通过Internet.wcf合并Web服务的功能,.NET远程,消息队列和企业服务,并集成在Visual Studio.wcf中。WCF专门用于服务开发。
这与休息,默认16K,字节[]数组的最大长度,约100MB无关。
如果您需要大量传输它,Microsoft的建议是将流作为WCF服务接口的参数。
最受欢迎,最简洁的描述是:Inter -Process通信。
WCF服务本身可以使用各种主机,例如IIS,控制台或Winform,并且可以通过修改WCF配置文件来配置HTTP和NETTCP以及其他通信方法。
同时是对同时执行的任务数量的度量,并且该单元是任务(例如请求,作业,交易等)。执行时间是完成任务的时间的测量,该单位是时间(例如毫秒,秒等)。吞吐量是在固定时间内完成的任务数量的测量,而单位是任务/时间(例如请求/秒,交易/秒等)。您可以通过减少执行时间或增加和增加来增加吞吐量。在WCF中,可以通过InstanceContextMode和ConcurrencyMode来控制和分发。
InstanceContextMode用于控制服务的实例服务,可以有以下值:
单人:服务实例处理所有客户端的所有请求。
percall:为每个客户端为每个客户端请求创建一个服务实例。
persection:为每个客户端会话创建一个服务实例(即每个客户端会话的所有请求以共享服务实例)。
ConcurrencyMode用于控制服务实例中的线程。有以下值:
单人:同时,只有一个线程可以访问服务实例。
重新进入:同时,只有一个线程访问服务实例,但是该线程可以暂时离开服务实例,返回并稍后继续访问。
Mutiple:多线程访问服务实例。
以下使用简单的代码来显示InstanceContextMode和ConsurrencyMode对实例和服务类的并发的影响。这段时间我使用NetTCPBinding,支持会话。
服务合同:
使用系统;
使用System.ServiceModel;
名称空间IFRUITSVC
{{{
[serviceContract(namespace =“”)]
公众IFRUITSERVICE
{{{
[coperation Contract]
字符串getFruitName();
}
}
服务课:
使用系统;
使用System.ServiceModel;
使用ifruitsvc;
使用System.Threading;
使用System.ServiceMol.Destripting;
名称空间fruitsvc
{{{
公报Fruitservice:ifruitservice
{{{
fruitservice()
{{{
console.writeline(“ {0}:在线程上创建Fruitservice的新实例”,日期
}
PublicString getFruitName()
{{{
console.writeline(“ {0}:getFruitName在thread {1}上调用”,日期
thread.currentthread.managedThreadID);
返回“香蕉”;
}
}
}
服务侧存储:
使用系统;
使用System.ServiceModel;
使用System.ServiceMol.Destripting;
使用ifruitsvc;
使用fruitsvc;
名称空间wcfinstancehost
{{{
课程计划
{{{
静态视频主(字符串[] args)
{{{
使用(ServiceHost Host = new ServiceHost(typeof(Fruitservice),
new URI(“ net.tcp:// localhost:8000”))))))))))))))
{{{
serviceEndPoint sed = host.AddServiceEndPoint(typeof(IfrutService),新的NetTcpBinding(),“ FruitService”);
//设置SessionMode
sed.contract.sessionmode = sessionmode.allowed;
servicemetadatabehavior行为=新的服务metadatabehavior();
host.description.behaviviviviadd(crathion);行为;
servicebehavioAttribute acrapioattr = host.descripting.behavivivivivivivivivivivivirveirvehaviottribute();
ifhavioattr == null)
{{{
caparioattr = new ServiceBehaviorAttribute();
}
//设置服务类FruitService的ConturrencyMode和InstanceContextMode。
caparioattr.concurrencyMode = concurrencyMode.Single;
caparioattr.instancecontextmode = instancecontextmode.percall;
HOST.ADDSERVICEENDPOINT(typeof(imetadadadadadaexchange),
metadataexchangebindings.createmextcpbiding(),“ mex”);
host.open();
Console.Writeline(“水果服务正在运行...”);
Console.Readline();
}
}
}
}
运行此控制台程序,使用以下命令生成代理和配置文件
“/a”将在异步调用方法中生存。然后将两个文件添加到客户端项目中。
客户端呼叫代码:
使用系统;
使用System.Threading;
名称空间wcfinstanceclient
{{{
课程计划
{{{
静态视频主(字符串[] args)
{{{
fruitserviceclient proxy = new FruitserviceClient();
for(int i = 0; i 4; i ++)
{{{
console.writeline(“ {0}:开始调用getFruitName”,dateTime.now.ticks);
代理。begetetFruitName(getFruitnameCallback,proxy);
}
Console.Readline();
}
静态效果GetFruitnameCallback(iasyncresult ar)
{{{
字符串名称=(fruitservicLient)ar.asyncstate).ndgetFruitName(ar);
console.writeline(“ {0}:end fruitname:{1}”,dates.now.ticks,name);
}
}
}
首先设置组合设置,例如ConcurrentMode.Single和InstanceContextMode.PerCall,以生成每个调用的服务实例。
操作结果:
以下在CondurrencyMode.Single和InstanceContextMode.Pession下进行了测试。结果应该是每个客户会话的服务实例。这次,应该只有两个服务示例来启动两个客户。
执行结果,服务器:
客户:
下面我们使用ConcurrencyMode.Multiple和InstanceContextMode.Pession。由于允许在同一会话中访问多个线程,因此需要访问访问的安全性。
修改服务代码如下:
公报Fruitservice:ifruitservice
{{{
//添加一个对象以访问此对象的锁
对象lockobj = newObject();
privateint n = 0;
fruitservice()
{{{
console.writeline(“ {0}:在线程上创建Fruitservice的新实例”,日期
}
PublicString getFruitName()
{{{
字符串名称=“香蕉”;
console.writeline(“ {0}:getFruitName在thread {1}上调用”,日期
thread.currentthread.managedThreadID);
锁(lockobj)
{{{
名称=名称+“ _”+(++ n).tring();
}
返回名称;
}
}
程序的执行结果(或运行两个客户端)服务器:
客户:
如果将InstanceContextMode设置为percall,则将是1.几个组合不会一一测试。
检测网络传输和传输速度。如果传输量太大,当服务器和客户端是.NET程序时,则可以使用binaryFormatter使用binaryformatter first.com prist.compress the byte流,然后拆卸之后接收终端。
结论:以上是首席CTO注释为每个人编制的最大数据传输量的总内容。感谢您花时间阅读此网站。我希望这对您有帮助。有关WCF传输的最大数据传输量的更多信息。不要忘记在此站点上找到它。