『壹』 请问LoadRunner测试Winform访问wcf选择什么协议录制脚本
测试客户端程序不需要选择协议的吧。
协议,是通信过程中的规范。
如果是测试客户端程序,不存在谁跟谁通信,不存在协议。
如果是C/S程序要测试服务器端,那这个问题就变了。
『贰』 vs2013 wcf测试客户端在哪
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE
下面有个wcftextclient.exe
『叁』 如何配置net.tcp 的WCF服务
1部署IIS1.1安装WASIIS原本是不支持非HTTP协议的服务,为了让IIS支持net.tcp,必须先安装WAS(),即windows进程激活服务。打开控制面板--程序和功能--打开或关闭windows功能,安装WAS,安装完毕后在Services窗口中可以到到如下服务:;Net.MsmqListenerAdapter;Net.PipeListenerAdapter;Net.TcpListenerAdapter;Net.TcpPortSharingService.这几个服务。确定Net.TcpListenerAdapter与Net.TcpPortSharingService是否已经启动。1.2确定WCF是否启用Non-Http支持同样是在控件面板中打开这个功能1.3给站点添加net.tcp绑定在IIS中,选中网站,然后在右边的操作菜单栏中单击绑定,会弹出一个“网站绑定”窗口,点击添加,类型选择net.tcp1.4启用net.tcp协议选择网站,点击“高级设置”,弹出的的窗体中,在“已启用的协议”一栏中手动添加:net.tcp2测试服务2.1新建服务用VS2010新建一个WCF服务,为了简单,我就直接用VS默认生成的作测试了。只有一个GetData方法下面是配置的Config:ViewCode2.2发布服务将服务发布到IIS,在浏览器中访问服务,如果访问正常就说明服务部署成功,2.3测试服务新建一个控制台项目,测试服务。添加服务测试服务正常。3遇到的问题问题1:找不到具有绑定NetTcpBinding的终结点的与方案net.tcp匹配的基址。注册的基址方案是[http]。这可能是网站中没有启用net.tcp协议所到致,也就是少了上面的1.4.问题2:未找到URI“net.tcp://gyoung/Service1.svc/mex”的兼容TransportManager。这可能是因为使用了指向虚拟应用程序外部的绝对地址,或终结点的绑定设置与其他服务或终结点所设置的绑定设置不匹配。请注意,同一协议的所有绑定在同一应用程序中应具有相同的设置。这个问题并没有找到真正的原因,应该是binding设置的原因,原先的binding配置是:这样的话会出现上面的错误,但当我将后面四个节点去掉后,即变成:就没有报这个错误了。问题3:有没有必要绑定host地址:之前我在service节点下有增加host地址但发现这根本不起作用,因不不管我怎么设置,最后我的net.tcp地址都是上面那个,是我设置有错误?补充一点:如果你的Silverlight程序无法调用net.tcp服务,可能是你少了跨域文件:clientaccesspolicy.xml将clientaccesspolicy.xml放到IIS的根目录:C:\inetpub\wwwroot中,因为SL默认只访问80端口,所以要增加这个文件。
『肆』 怎么用cxf的wsdl2java解析wcf生成的wsdl
1、下载apache-cxf-2.6.2在环境变量中配置CXF_HOME ,在PATH中加入%CXF_HOME%\bin 2、输入cmd 进入控制窗口,输入wsdl2java看是否配置成功
3、参考它的文档看这个工具的具体参数的用法
wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空间,也就是要生成代码的包名:
-d 指定要产生代码所在目录
-client 生成客户端测试web service的代码
-server 生成服务器启动web service的代码
-impl 生成web service的实现代码
-ant 生成build.xml文件
-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
详细用法见:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
『伍』 wcf 并发量多少
并发是对同时执行的任务数量的度量,单位为任务(如请求、作业、事务等)。执行时间是对完成任务所用时间的度量,单位为时间(如毫秒、秒等)。吞吐量是在固定的时间内完成的任务数量的度量,单位为任务/时间(如请求/秒、事务/秒等)。可以通过减少执行时间或提高并发来提高吞吐量。在WCF中可以通过InstanceContextMode和ConcurrencyMode来控制并发行为。
InstanceContextMode用于控制服务类实例化,可以有以下几种取值:
Single:一个服务类实例处理所有客户端的所有请求。
PerCall:为每一个客户端的每一个请求创建一个服务类实例。
PerSession:为每一个客户端会话创建一个服务类实例(也就是每一个客户端会话的所有请求共用一个服务类实例)。
ConcurrencyMode用来控制服务类实例内的线程并发。有以下取值:
Single:在同一时刻只有一个线程可以访问服务类实例。
Reentrant:在同一时刻只有一个线程访问服务类实例,但是线程能暂时离开服务类实例,稍后回来并继续访问。
Mutiple:多线程能并发访问服务类实例。
下面用简单的代码来展示InstanceContextMode和ConcurrencyMode不同的设置组合对服务类实例化和并发的影响。这次用NetTcpBinding绑定,它支持会话。
服务契约:
using System;
using System.ServiceModel;
namespace IFruitSvc
{
[ServiceContract(Namespace="http://www.cnblogs.com/qiuwuyu")]
publicinterface IFruitService
{
[OperationContract]
string GetFruitName();
}
}
服务类:
using System;
using System.ServiceModel;
using IFruitSvc;
using System.Threading;
using System.ServiceModel.Description;
namespace FruitSvc
{
publicclass FruitService:IFruitService
{
FruitService()
{
Console.WriteLine("{0} : Created new instance of FruitService on thread", DateTime.Now.Ticks);
}
publicstring GetFruitName()
{
Console.WriteLine("{0} : GetFruitName called on thread {1} ", DateTime.Now.Ticks,
Thread.CurrentThread.ManagedThreadId);
return"banana";
}
}
}
服务端寄存:
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using IFruitSvc;
using FruitSvc;
namespace WcfInstanceHost
{
class Program
{
staticvoid Main(string[] args)
{
using (ServiceHost host =new ServiceHost(typeof(FruitService),
new Uri("net.tcp://localhost:8000")))
{
ServiceEndpoint sed= host.AddServiceEndpoint(typeof(IFruitService), new NetTcpBinding(), "FruitService");
//设置IFruitService的ServiceContract特性的SessionMode
sed.Contract.SessionMode = SessionMode.Allowed;
ServiceMetadataBehavior behavior =new ServiceMetadataBehavior();
host.Description.Behaviors.Add(behavior);
ServiceBehaviorAttribute behaviorAttr = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
if (behaviorAttr ==null)
{
behaviorAttr =new ServiceBehaviorAttribute();
}
//设置服务类FruitService的ServiceBehavior特性的ConcurrencyMode和InstanceContextMode
behaviorAttr.ConcurrencyMode = ConcurrencyMode.Single;
behaviorAttr.InstanceContextMode = InstanceContextMode.PerCall;
host.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
host.Open();
Console.WriteLine("Fruit Service Is Running...");
Console.ReadLine();
}
}
}
}
运行此控制台程序,用如下命令生成代理和配置文件
“/a”是为了生存异步调用方法。而后把生存的两个文件添加到客户端项目内。
客户端调用代码:
using System;
using System.Threading;
namespace WcfInstanceClient
{
class Program
{
staticvoid Main(string[] args)
{
FruitServiceClient proxy =new FruitServiceClient();
for (int i =0; i <4; i++)
{
Console.WriteLine("{0}: Begin Calling GetFruitName", DateTime.Now.Ticks);
proxy.BeginGetFruitName(GetFruitNameCallBack, proxy);
}
Console.ReadLine();
}
staticvoid GetFruitNameCallBack(IAsyncResult ar)
{
string name = ((FruitServiceClient)ar.AsyncState).EndGetFruitName(ar);
Console.WriteLine("{0}: End FruitName:{1} ", DateTime.Now.Ticks, name);
}
}
}
首先设置ConcurrencyMode.Single和InstanceContextMode.PerCall 这种组合设置会为每次调用生成一个服务类实例。
运行结果:
下面用ConcurrencyMode.Single和InstanceContextMode.PerSession测试下,结果应该是每个客户会话一个服务类实例,这次启动两个客户端,应该只有两个服务类实例。
执行结果,服务端:
客户端:
下面我们用ConcurrencyMode.Multiple和InstanceContextMode.PerSession进行测试,因为同一会话中允许多个线程并发访问,所以需要手工控制访问的安全性。
修改服务类代码如下:
publicclass FruitService:IFruitService
{
//添加一对象,对此对象访问加锁
object lockObj =newobject();
privateint n =0;
FruitService()
{
Console.WriteLine("{0} : Created new instance of FruitService on thread", DateTime.Now.Ticks);
}
publicstring GetFruitName()
{
string name ="banana";
Console.WriteLine("{0} : GetFruitName called on thread {1} ", DateTime.Now.Ticks,
Thread.CurrentThread.ManagedThreadId);
lock (lockObj)
{
name=name +"_"+ (++n).ToString();
}
return name;
}
}
程序的执行结果(还是运行两个客户端)服务端:
客户端:
假如把InstanceContextMode设置为PerCall那将都会是1。还有几种组合就不一一测试。
『陆』 如何用soap ui 5.2.1测试wcf webservice
1.2. 启动程序
soapui-25-beta2
1.3. 新建计划
File->New soapUI Project
新建计划
Ok后,查看提供的web service的服务。
web service的服务列表
1.4 示例1 getSupportedDBs(不需要编辑请求)
双击Request1,显示Request界面,点击绿色的提交按钮,就会递交请求,同时会在右侧返回结果,请求与结果都为XML格式。
1.5 示例2 fetchBatch(编辑请求)
请求的页面有问号的地方,都是需要你编辑,如同查询时你选择数据库输入查询结果一样。
fetchBatch
<soapenv:Body>
<wsd:fetchBatch soapenv:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/“>
<db xsi:type=”xsd:string”>uniprotkb</db>
<ids xsi:type=”xsd:string”>WAP_MOUSE,WAP_RAT</ids>
<format xsi:type=”xsd:string”>default</format>
<style xsi:type=”xsd:string”>default</style>
</wsd:fetchBatch>
</soapenv:Body>
提交返回结果
返回结果
2 说明
本文只是对SoapUI 做了简单的介绍,主要用其来查看web service提供的接口,以及返回的结果,以便进一步的利用,但是SoapUI的功能远不止这些,其可以对web service进行功能上和性能上的测试。
『柒』 如何提高WCF的执行效率
下面是我的各处配置: <bindings>
<customBinding>
<binding name="myMexTcpBinding">
<binaryMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="1638400" maxBytesPerRead="409600" maxNameTableCharCount="1638400"/>
</binaryMessageEncoding>
<tcpTransport maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" maxBufferSize="65536000"/>
</binding>
<binding name="mybinding">
<binaryMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="1638400" maxBytesPerRead="409600" maxNameTableCharCount="1638400"/>
</binaryMessageEncoding>
<tcpTransport maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" maxBufferSize="65536000"/>
</binding>
</customBinding>
</bindings>
<service behaviorConfiguration="MyBehavior" name="Services.BaseDataManage.BaseDataManage">
<endpoint address="" binding="customBinding" bindingConfiguration="mybinding" contract="Services.BaseDataManage.IBaseDataManage">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8802/BaseDataManage/"/>
</baseAddresses>
</host>
</service>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug ="true"/>
<serviceTimeouts transactionTimeout="23:59:59"/>
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/>
</behavior>
[ServiceContract(CallbackContract=typeof(IBaseDataCallBack))]
public partial interface IBaseDataManage
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public partial class BaseDataManage : IBaseDataManage
wcfbindingbehavior
性能不好的原因很多:
1、事务:事务是需要同步上下文和会话,因此发生阻塞,若达到会话连接最高值,之后的会话需排队甚至超时;解决:将支持事务与非事务的服务分开成不同的服务;
2、回调:回调需要采用独立线程或线程池执行回调操作,否则可能在回调时因掉线、长时间运算、超时等因素造成会话一直占用或长时间占用,尽可能在设计上让服务IsOneWay=true;
3、在服务器资源允许的情况下:采用InstanceContextMode.PerCall,UseSynchronizationContext=false,ConcurrencyMode = ConcurrencyMode.Multiple,这种能最大的并发应用。
4、吞吐量配置,我不知道配置文件如何配,我自己是写了一个ServiceThrottlingAttribute,继承Attribute和IServiceBehavior,最后配置最大连接数 MaxConcurrentSessions (WCF默认为10),上下文实例数 MaxConcurrentInstances,最大待处理消息数或回调数,MaxConcurrentCalls(WCF默认64),
5、以上仅是我配置过的,可能有些解释不正确,但通过这样的改动后,并发和性能都得到很大的提升,由于我这里是工作流服务,目前最高有3000-5000工作流在同时运行,并没有发生明显的阻塞
『捌』 如何测试部署好的wcfservice
2. 大致步骤是:
远程登录到主机上
安装.net framework
确定你的windows系统下是否启动了IIS。注意设置其端口不是80,例如设置为70
把你的asp.net网站所在目录复制到主机上
在IIS里边配置一个新的虚拟目录(例如abc),使其物理地址为你的网站目录。
配置这个虚拟目录的属性,启用asp.net应用程序池。
通过你的主机的网卡属性查看是否启用了防火墙。如果启用了,暂时先关闭它!
在主机上本地测试你的网站。例如确保可以从ie地址栏访问
http //localhost:70/abc/myservice.svc
通过远程访问服务,例如确保可以从你的桌面电脑的浏览器地址栏访问
『玖』 WCF有性能测试工具,跟踪监控工具吗
一、配置WCF应用程序支持消息的跟踪
要想跟踪WCF应用程序运行过程中的相关信息,我们需要对WCF应用程序进行部署,在.NET快速开发整合框架(RDIFramework.NET),WCF服务默认部署在Windows服务下,服务启动后,如下图所示: 要想捕获软件在运行过程中调用WCF服务所产生的一系列消息,我们首先需要对服务端的App.Config配置文件作相应的更改,如下图所示: 同时,我们还要配置捕获的信息所存放的地方:
通过以上的配置,我们再开启我们的WCF服务,开启后运行软件做一些操作,可以看到在我们:c:\temp\RDIFramework.svclog 下已经记录了相应操作所产生的WCF消息。
二、查看WCF产生的消息
对于WCF的消息跟踪主要有Microsoft Service Trace Viewer(服务跟踪查看器)和tcpTrace这两个。服务跟踪查看器工具功能比较强大可以了解 WCF 侦听器生成的诊断跟踪信息,从而找到错误的根本原因。该工具提供了一种轻松查看、分组和筛选跟踪的方法,以便可以诊断、修复和验证 WCF 服务的问题,但是使用之前需要在服务端作相应的配置(如上,我们的简单配置过程)。tcpTrace其实就是一个通过端口映射来捕获Tcp包的工具使用起来非常简单,由于WCF的很多绑定都会走tcp协议因此使用该工具来捕获数据包会非常方便。下面我们就使用Microsoft Service Trace Viewer(服务跟踪查看器)来查看我们跟踪WCF运行过程所产生的消息。
要打开服务跟踪查看器,可以通过使用命令窗口定位到 WCF 安装位置 (C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin),然后键入 SvcTraceViewer.exe,可以启动服务跟踪查看器。或者按下图操作也可打开服务跟踪查看器:
打开服务跟踪查看器后,我们通过“服务跟踪查看器”打开我们跟踪的消息记录,通过WCF服务端的配置,跟踪的消息记录存放在C:\temp\RDIFramework.svclog,打开后如下图所示:
『拾』 Web Service和WCF的到底有什么区别
Web
Service是早期的技术实现了,也是soap的东西,采用的主要是http协议,假如是在C#上开发的话,需要寄宿在IIS上来实现。
WCF的话是相对较新的技术,里面的basichttpbinding可以跟以前的ws进行通信,并且集成了大部分的通信协议(几种http协议的实现以及net.Tcp实现、msmq、命名管道等实现),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。
差别的话,感觉有这以下几点[针对C#来说的]。
1.
ws的话,编程模型没有wcf的那么好,具体的实现差别建议网络下,个人觉得wcf比较好。wcf可以用契约的接口方式来进行实现,而ws的话主要是通过继承WebService的类来实现的,方法上添加WebMethod特性,WCF的话是通过服务契约来声明(可以是接口也可以是类对象)
2.
ws的话通用性比较强,跟java等ws也可以进行互相通信,然后假如是wcf发布的服务,除了basicHttpBinding这种绑定之外,其余的几种绑定基本上不能作为互相通信。例如命名管道跟net.Tcp都是,值得说的是这里的net.Tcp跟原生的tcp是不一样的,内部实现上参考tcp的可靠连接机制进行了应用层的一套实现。
3.
另外一点就是服务引用跟web引用上的,这个严格来说不能属于两者的区别,只是.net版本的区别,主要是针对客户端对服务端发布好的服务进行的引用,服务引用生成的时候,会在配置文件上存在一份配置项,可以进行ABC终结点的配置,假如是web引用的话,会在setting中添加上一个硬编码的地址。建议用服务引用。
4.
还有一个就是客户端调用服务端开发的时候,webservice的话,基本上只能通过服务端发布的地址来进行引用[应用的方式可以参考点3],或者通过服务端提供的wsdl文件来进行引用(该种方式一般比较少,因为需要提供文件,而不是通过公开的方式来进行接口的提供,无法应对服务变更后发布问题,但是确实有这个情况的存在)。而wcf的话,还存在可以通过提供契约文件(就是声明了ServiceContract的那个接口文件)来进行服务的调用。
5.
在接口层面的话,凡是IList<class
T>以及IDictionary<class
T>这一类的泛型实现都会在进行服务引用的时候,都会转换为数组的,例如void
F(IList<int>)会在引用后成为void
F(int[])这种方式,而才用点4提供的契约文件的话就能保持方法的原始声明。
个人建议的话,假如是新开发的系统基本上都才用wcf比较好,一个是接口的思想,一个是假如需要转换为其他协议的话可以比较方便,只需要通过配置文件修改下就可以[当前前提是没有用到特定协议的特定属性,例如服务回调,有些协议是不支持双向通信的]。而且也需要考虑发布的服务是否需要公开给别的语言进行通信。