WCF:如何将net.tcp协议寄宿到IIS
1 部署IIS
1.1 安裝WAS
IIS原本是不支持非HTTP協(xié)議的服務(wù),為了讓IIS支持net.tcp,必須先安裝WAS(Windows Process Activation Service),即windows進(jìn)程激活服務(wù)。
打開(kāi)控制面板--程序和功能--打開(kāi)或關(guān)閉windows功能,安裝WAS,如圖:
安裝完畢后在Services窗口中可以到到如下服務(wù):Windows Process Activation Service;Net.Msmq Listener Adapter;Net.Pipe Listener Adapter;Net.Tcp Listener Adapter;Net.Tcp Port Sharing Service.這幾個(gè)服務(wù)。確定Net.Tcp Listener Adapter 與Net.Tcp Port Sharing Service是否已經(jīng)啟動(dòng)。
1.2? 確定WCF是否啟用Non-Http支持
同樣是在控件面板中打開(kāi)這個(gè)功能,如圖:
?
1.3 給站點(diǎn)添加net.tcp綁定
在IIS中,選中你的網(wǎng)站,然后在右邊的操作菜單欄中單擊綁定,會(huì)彈出一個(gè)“網(wǎng)站綁定”窗口,點(diǎn)擊添加,類型選擇net.tcp
1.4 啟用net.tcp協(xié)議
?選擇你的網(wǎng)站,點(diǎn)擊“高級(jí)設(shè)置”,彈出的的窗體中,在“已啟用的協(xié)議”一欄中手動(dòng)添加:net.tcp
2 測(cè)試服務(wù)
?2.1 新建服務(wù)
用VS2010新建一個(gè)WCF服務(wù),為了簡(jiǎn)單,我就直接用VS默認(rèn)生成的作測(cè)試了。只有一個(gè)GetData方法
下面是配置的Config:
View Code2.2 發(fā)布服務(wù)
將服務(wù)發(fā)布到IIS,在瀏覽器中訪問(wèn)服務(wù),如果訪問(wèn)正常就說(shuō)明服務(wù)部署成功,如圖:
2.3 測(cè)試服務(wù)
?新建一個(gè)控制臺(tái)項(xiàng)目,測(cè)試服務(wù)。添加服務(wù)
測(cè)試服務(wù)正常。
3 遇到的問(wèn)題
問(wèn)題1:找不到具有綁定 NetTcpBinding 的終結(jié)點(diǎn)的與方案 net.tcp 匹配的基址。注冊(cè)的基址方案是 [http]。
?這可能是你的網(wǎng)站中沒(méi)有啟用net.tcp協(xié)議所到致,也就是少了上面的1.4.
問(wèn)題2:未找到 URI“net.tcp://gyoung/Service1.svc/mex”的兼容 TransportManager。這可能是因?yàn)槭褂昧酥赶蛱摂M應(yīng)用程序外部的絕對(duì)地址,或終結(jié)點(diǎn)的綁定設(shè)置與其他服務(wù)或終結(jié)點(diǎn)所設(shè)置的綁定設(shè)置不匹配。 請(qǐng)注意,同一協(xié)議的所有綁定在同一應(yīng)用程序中應(yīng)具有相同的設(shè)置。
?這個(gè)問(wèn)題我并沒(méi)有找到真正的原因,應(yīng)該是binding設(shè)置的原因,我原先的binding配置是:
<binding name="netTcpBindConfig" closeTimeout="00:30:00" portSharingEnabled="true"openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"hostNameComparisonMode="StrongWildcard" listenBacklog="10"maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10"maxReceivedMessageSize="2147483647">這樣的話會(huì)出現(xiàn)上面的錯(cuò)誤,但當(dāng)我將后面四個(gè)節(jié)點(diǎn)去掉后,即變成:
<binding name="netTcpBindConfig" closeTimeout="00:30:00" portSharingEnabled="true"openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"hostNameComparisonMode="StrongWildcard" listenBacklog="10">就沒(méi)有報(bào)這個(gè)錯(cuò)誤了。最后一個(gè)問(wèn)題,園子里哪位大神知道具體原因的,求指導(dǎo)~
問(wèn)題3:有沒(méi)有必要綁定host地址?
之前我在service節(jié)點(diǎn)下有增加host地址
<host><baseAddresses><add baseAddress="http://localhost:4504"/><add baseAddress="net.tcp://localhost:808/Service1.svc"/></baseAddresses></host>但我發(fā)現(xiàn)這根本不起作用,因不不管我怎么設(shè)置,最后我的net.tcp地址都是上面那個(gè),是我設(shè)置有錯(cuò)誤?
?
補(bǔ)充一點(diǎn):
如果你的Silverlight 程序無(wú)法調(diào)用net.tcp服務(wù),可能是你少了跨域文件:clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8" ?> <access-policy><cross-domain-access><policy><allow-from http-request-headers="*"><domain uri="*"/></allow-from><grant-to><resource path="/" include-subpaths="true"/><socket-resource port="4502-4530" protocol="tcp" /></grant-to></policy></cross-domain-access> </access-policy>將clientaccesspolicy.xml放到IIS的根目錄:C:\inetpub\wwwroot中,因?yàn)镾L默認(rèn)只訪問(wèn)80端口,所以要增加這個(gè)文件。
參考:http://www.cnblogs.com/chenkai/archive/2011/03/14/1984104.html
如果我的文章對(duì)你有幫助,就點(diǎn)一下推薦吧.(*^__^*) posted on 2014-02-24 01:16 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3563958.html
總結(jié)
以上是生活随笔為你收集整理的WCF:如何将net.tcp协议寄宿到IIS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java+mysql中文乱码问题
- 下一篇: 程序员的情书!