『壹』 請問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比較好,一個是介面的思想,一個是假如需要轉換為其他協議的話可以比較方便,只需要通過配置文件修改下就可以[當前前提是沒有用到特定協議的特定屬性,例如服務回調,有些協議是不支持雙向通信的]。而且也需要考慮發布的服務是否需要公開給別的語言進行通信。