手动配置WCF宿主的.config文件遇到的几种错误
生活随笔
收集整理的這篇文章主要介紹了
手动配置WCF宿主的.config文件遇到的几种错误
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
手動(dòng)配置WCF宿主的.config文件遇到的幾種錯(cuò)誤 ?
今天嘗試用控制臺(tái)應(yīng)用程序作為WCF宿主,遇到幾個(gè)問(wèn)題,這幾個(gè)問(wèn)題雖然都不難,但尋找解決方案相當(dāng)費(fèi)時(shí)費(fèi)力,做記錄。?
?
WCF標(biāo)準(zhǔn)的配置文件為:
?
<system.serviceModel>
? ? ? ? <services>
? ? ? ? ? ? <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
? ? ? ? ? ? ? ? <!-- Service Endpoints -->
? ? ? ? <!-- This endpoint is exposed at the base address provided by the host : http://localhost:1808/Service.svc-->
? ? ? ? ? ? ? ? <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator">
? ? ? ? ? ? ? ? ? ? <!--?
? ? ? ? ? ? ? 部署時(shí),應(yīng)刪除或替換下列標(biāo)識(shí)元素,以反映
? ? ? ? ? ? ? 在其下運(yùn)行部署服務(wù)的標(biāo)識(shí)。刪除之后,WCF 將
? ? ? ? ? ? ? 自動(dòng)推導(dǎo)相應(yīng)標(biāo)識(shí)。
? ? ? ? ? -->
? ? ? ? ? ? ? ? ? ? <identity>
? ? ? ? ? ? ? ? ? ? ? ? <dns value="localhost"/>
? ? ? ? ? ? ? ? ? ? </identity>
? ? ? ? ? ? ? ? </endpoint>
? ? ? ? <!-- This mex endpoint is exposed at the base address provided by the host : http://localhost:1808/Service.svc/mex-->
? ? ? ? ? ? ? ? <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
? ? ? ? ? ? </service>
? ? ? ? </services>
? ? ? ? <behaviors>
? ? ? ? ? ? <serviceBehaviors>
? ? ? ? ? ? ? ? <behavior name="CalculatorServiceBehavior">
? ? ? ? ? ? ? ? ? ? <!-- 為避免泄漏元數(shù)據(jù)信息,請(qǐng)?jiān)诓渴鹎皩⒁韵轮翟O(shè)置為 false 并刪除上面的元數(shù)據(jù)終結(jié)點(diǎn)-->
? ? ? ? ? ? ? ? ? ? <serviceMetadata httpGetEnabled="true"/>
? ? ? ? ? ? ? ? ? ? <!-- 要接收故障異常詳細(xì)信息以進(jìn)行調(diào)試,請(qǐng)將以下值設(shè)置為 true。在部署前設(shè)置為 false 以避免泄漏異常信息-->
? ? ? ? ? ? ? ? ? ? <serviceDebug includeExceptionDetailInFaults="false"/>
? ? ? ? ? ? ? ? </behavior>
? ? ? ? ? ? </serviceBehaviors>
? ? ? ? </behaviors>
? ? </system.serviceModel>
?
?
?
遇到問(wèn)題:
?
1.“服務(wù)XXXXX有零個(gè)應(yīng)用程序(非基礎(chǔ)結(jié)構(gòu))終結(jié)點(diǎn)”。
?
這是因?yàn)?lt;service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">的name屬性沒(méi)有對(duì)應(yīng)到正確的名稱。?
?
在上面的例子中使用的是Microsoft.ServiceModel.Samples命名空間下的CalculatorService類,如果命名空間命或類名寫錯(cuò),或者寫的不完全(比如只寫了命名空間名字或者類名),則會(huì)出現(xiàn)上述錯(cuò)誤。
?
2.WCF服務(wù)發(fā)布以后,Client 端無(wú)法引用WCF服務(wù),查看錯(cuò)誤為“application soap+xml charset utf-8 客戶端和服務(wù)綁定可能不匹配”。或者使用IE訪問(wèn)WCF服務(wù)地址的時(shí)候顯示“當(dāng)前已禁用此服務(wù)元數(shù)據(jù)的發(fā)布”。
?
按著《ASP.NET 3.5高級(jí)程序設(shè)計(jì)(第4版)》中的WCF案例一步步進(jìn)行,書上說(shuō)為了使初學(xué)者更好的關(guān)注WCF細(xì)節(jié),先不使用WCF模版,但是進(jìn)行到最后報(bào)出上述錯(cuò)誤。書上寫的配置是不包含<behaviors>節(jié)點(diǎn)的,這時(shí)Client 端無(wú)法正常連接服務(wù),于是在網(wǎng)上各種找解決方法,在http://www.cnblogs.com/lanpei/archive/2009/10/29/1592218.html上找到累死問(wèn)題解決方法,于是加上<behaviors>節(jié)點(diǎn),此時(shí)仍然會(huì)報(bào)相同錯(cuò)誤。因?yàn)闀系睦又袥](méi)有<behaviors>節(jié)點(diǎn),所以<service>節(jié)點(diǎn)中也不包含behaviorConfiguration屬性,設(shè)置好behaviorConfiguration="CalculatorServiceBehavior",徹底沒(méi)問(wèn)題了。
?
?3.使用NetTcpBinding綁定WCF服務(wù),Client端引無(wú)法引用WCF服務(wù),查看錯(cuò)誤為“元數(shù)據(jù)包含無(wú)法解析的引用”。
?
剛開始加了各種節(jié)點(diǎn)都不好使,后來(lái)查MSDN,下載了一個(gè)NetTcpBinding的案例仔細(xì)對(duì)比才發(fā)現(xiàn)是<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>中的contract="IMetadataExchange"寫錯(cuò)了,本以為這個(gè)屬性應(yīng)該與<endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator">中的contract相同,后來(lái)發(fā)現(xiàn)理解錯(cuò)誤,在使用http綁定的時(shí)候?qū)戝e(cuò)好像無(wú)所謂,但是使用NetTcpBinding的時(shí)候,必須是IMetadataExchange,暫時(shí)還不太理解為什么。
?
?4.使用NetTcpBinding綁定WCF服務(wù),本機(jī)Client 端可以正常訪問(wèn),但跨機(jī)器訪問(wèn)時(shí)提示錯(cuò)誤“net.tcp://XXXXXX不支持請(qǐng)求的升級(jí)。這可能是由于不匹配的綁定”。
?
這個(gè)問(wèn)題很困擾,Google上查“不支持請(qǐng)求的升級(jí)”居然沒(méi)有任何相關(guān)線索,后來(lái)忘了怎么找到解決辦法的。該問(wèn)題是因?yàn)榉?wù)端和客戶端的安全設(shè)置不一致,也就是<security mode=""/>節(jié)點(diǎn)中的mode值不一致,設(shè)置成一致的(比如None,Transport)就沒(méi)問(wèn)題了。
?
?
?
個(gè)人覺(jué)得,的確像書上說(shuō)的那樣,不使用模板會(huì)關(guān)注WCF的一些細(xì)節(jié),可以更好的理解WCF,之前直接用WCF模板做成類似WebService的服務(wù),然后部署到IIS上,覺(jué)得很簡(jiǎn)單,根本沒(méi)想過(guò)改變宿主或者安全性之類的問(wèn)題。最近重新學(xué)習(xí)WCF才發(fā)現(xiàn),要注意的東西還挺多。
今天嘗試用控制臺(tái)應(yīng)用程序作為WCF宿主,遇到幾個(gè)問(wèn)題,這幾個(gè)問(wèn)題雖然都不難,但尋找解決方案相當(dāng)費(fèi)時(shí)費(fèi)力,做記錄。?
?
WCF標(biāo)準(zhǔn)的配置文件為:
?
<system.serviceModel>
? ? ? ? <services>
? ? ? ? ? ? <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
? ? ? ? ? ? ? ? <!-- Service Endpoints -->
? ? ? ? <!-- This endpoint is exposed at the base address provided by the host : http://localhost:1808/Service.svc-->
? ? ? ? ? ? ? ? <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator">
? ? ? ? ? ? ? ? ? ? <!--?
? ? ? ? ? ? ? 部署時(shí),應(yīng)刪除或替換下列標(biāo)識(shí)元素,以反映
? ? ? ? ? ? ? 在其下運(yùn)行部署服務(wù)的標(biāo)識(shí)。刪除之后,WCF 將
? ? ? ? ? ? ? 自動(dòng)推導(dǎo)相應(yīng)標(biāo)識(shí)。
? ? ? ? ? -->
? ? ? ? ? ? ? ? ? ? <identity>
? ? ? ? ? ? ? ? ? ? ? ? <dns value="localhost"/>
? ? ? ? ? ? ? ? ? ? </identity>
? ? ? ? ? ? ? ? </endpoint>
? ? ? ? <!-- This mex endpoint is exposed at the base address provided by the host : http://localhost:1808/Service.svc/mex-->
? ? ? ? ? ? ? ? <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
? ? ? ? ? ? </service>
? ? ? ? </services>
? ? ? ? <behaviors>
? ? ? ? ? ? <serviceBehaviors>
? ? ? ? ? ? ? ? <behavior name="CalculatorServiceBehavior">
? ? ? ? ? ? ? ? ? ? <!-- 為避免泄漏元數(shù)據(jù)信息,請(qǐng)?jiān)诓渴鹎皩⒁韵轮翟O(shè)置為 false 并刪除上面的元數(shù)據(jù)終結(jié)點(diǎn)-->
? ? ? ? ? ? ? ? ? ? <serviceMetadata httpGetEnabled="true"/>
? ? ? ? ? ? ? ? ? ? <!-- 要接收故障異常詳細(xì)信息以進(jìn)行調(diào)試,請(qǐng)將以下值設(shè)置為 true。在部署前設(shè)置為 false 以避免泄漏異常信息-->
? ? ? ? ? ? ? ? ? ? <serviceDebug includeExceptionDetailInFaults="false"/>
? ? ? ? ? ? ? ? </behavior>
? ? ? ? ? ? </serviceBehaviors>
? ? ? ? </behaviors>
? ? </system.serviceModel>
?
?
?
遇到問(wèn)題:
?
1.“服務(wù)XXXXX有零個(gè)應(yīng)用程序(非基礎(chǔ)結(jié)構(gòu))終結(jié)點(diǎn)”。
?
這是因?yàn)?lt;service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">的name屬性沒(méi)有對(duì)應(yīng)到正確的名稱。?
?
在上面的例子中使用的是Microsoft.ServiceModel.Samples命名空間下的CalculatorService類,如果命名空間命或類名寫錯(cuò),或者寫的不完全(比如只寫了命名空間名字或者類名),則會(huì)出現(xiàn)上述錯(cuò)誤。
?
2.WCF服務(wù)發(fā)布以后,Client 端無(wú)法引用WCF服務(wù),查看錯(cuò)誤為“application soap+xml charset utf-8 客戶端和服務(wù)綁定可能不匹配”。或者使用IE訪問(wèn)WCF服務(wù)地址的時(shí)候顯示“當(dāng)前已禁用此服務(wù)元數(shù)據(jù)的發(fā)布”。
?
按著《ASP.NET 3.5高級(jí)程序設(shè)計(jì)(第4版)》中的WCF案例一步步進(jìn)行,書上說(shuō)為了使初學(xué)者更好的關(guān)注WCF細(xì)節(jié),先不使用WCF模版,但是進(jìn)行到最后報(bào)出上述錯(cuò)誤。書上寫的配置是不包含<behaviors>節(jié)點(diǎn)的,這時(shí)Client 端無(wú)法正常連接服務(wù),于是在網(wǎng)上各種找解決方法,在http://www.cnblogs.com/lanpei/archive/2009/10/29/1592218.html上找到累死問(wèn)題解決方法,于是加上<behaviors>節(jié)點(diǎn),此時(shí)仍然會(huì)報(bào)相同錯(cuò)誤。因?yàn)闀系睦又袥](méi)有<behaviors>節(jié)點(diǎn),所以<service>節(jié)點(diǎn)中也不包含behaviorConfiguration屬性,設(shè)置好behaviorConfiguration="CalculatorServiceBehavior",徹底沒(méi)問(wèn)題了。
?
?3.使用NetTcpBinding綁定WCF服務(wù),Client端引無(wú)法引用WCF服務(wù),查看錯(cuò)誤為“元數(shù)據(jù)包含無(wú)法解析的引用”。
?
剛開始加了各種節(jié)點(diǎn)都不好使,后來(lái)查MSDN,下載了一個(gè)NetTcpBinding的案例仔細(xì)對(duì)比才發(fā)現(xiàn)是<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>中的contract="IMetadataExchange"寫錯(cuò)了,本以為這個(gè)屬性應(yīng)該與<endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator">中的contract相同,后來(lái)發(fā)現(xiàn)理解錯(cuò)誤,在使用http綁定的時(shí)候?qū)戝e(cuò)好像無(wú)所謂,但是使用NetTcpBinding的時(shí)候,必須是IMetadataExchange,暫時(shí)還不太理解為什么。
?
?4.使用NetTcpBinding綁定WCF服務(wù),本機(jī)Client 端可以正常訪問(wèn),但跨機(jī)器訪問(wèn)時(shí)提示錯(cuò)誤“net.tcp://XXXXXX不支持請(qǐng)求的升級(jí)。這可能是由于不匹配的綁定”。
?
這個(gè)問(wèn)題很困擾,Google上查“不支持請(qǐng)求的升級(jí)”居然沒(méi)有任何相關(guān)線索,后來(lái)忘了怎么找到解決辦法的。該問(wèn)題是因?yàn)榉?wù)端和客戶端的安全設(shè)置不一致,也就是<security mode=""/>節(jié)點(diǎn)中的mode值不一致,設(shè)置成一致的(比如None,Transport)就沒(méi)問(wèn)題了。
?
?
?
個(gè)人覺(jué)得,的確像書上說(shuō)的那樣,不使用模板會(huì)關(guān)注WCF的一些細(xì)節(jié),可以更好的理解WCF,之前直接用WCF模板做成類似WebService的服務(wù),然后部署到IIS上,覺(jué)得很簡(jiǎn)單,根本沒(méi)想過(guò)改變宿主或者安全性之類的問(wèn)題。最近重新學(xué)習(xí)WCF才發(fā)現(xiàn),要注意的東西還挺多。
總結(jié)
以上是生活随笔為你收集整理的手动配置WCF宿主的.config文件遇到的几种错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 模拟标准c++中的Rtti
- 下一篇: 企业即时通讯市场增长500%