当前位置: 首页 > 网络应用技术

WCF的最大数据传输量是多少(2023年的最新饰面)

时间:2023-03-05 23:50:24 网络应用技术

  简介:今天,首席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传输的最大数据传输量的更多信息。不要忘记在此站点上找到它。