[英]Is basicHttpBinding the only option for connecting a .Net 2.0 client to a WCF Service?
[英]Is basicHttpBinding really required when exposing a WCF service as a Web Service for .NET 2.0 Target Client?
我有WCF服務,並將其托管在Windows服務中。
我試圖從基於.NET 2.0的Windows Form客戶端添加對該服務的引用。 我可以通過指向httpGetUrl =“ http:// localhost:8002 / HBAccess / help / mex”來獲取Web參考,但是當我檢查Reference.cs時,它只包含一個沒有名稱空間的名稱空間。
現在,我添加basicHttpBinding並重復相同的步驟:
現在,我可以看到Web服務的類。
我的資深同事堅持認為,將httpGetEnabled設置為true足以通過http導出WCF服務並進行適當的Web參考。
有人可以指出我在這里所缺少的嗎?
<system.serviceModel>
<services>
<service behaviorConfiguration="HBAcsNX.HBAccessBehavior" name="HBAcsNX.HBAccess">
<!--<endpoint address="" binding="basicHttpBinding" contract="HBAcsNX.HBAccess" />-->
<endpoint address="HBAccess" binding="netTcpBinding" contract="HBAcsNX.HBAccess" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:18264/HBAccess/" />
<add baseAddress="http://localhost:8002/HBAccess/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="HBAcsNX.HBAccessBehavior">
<serviceDebug includeExceptionDetailInFaults="True" httpHelpPageUrl="http://localhost:8002/HBAccess/help" />
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8002/HBAccess/help/mex" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
//產生的Reference.cs(僅名稱空間的空代理存根)
#pragma warning disable 1591
namespace Form.ServiceClient {
}
#pragma warning restore 1591
您必須指定一個綁定,而basicHttpBinding是唯一與.NET 2.0客戶端進行互操作的綁定。 .NET 2.0 ASMX客戶端僅支持基於HTTP的XML,沒有WS- *協議。
問題是mexHttpBinding
實際上沒有暴露你的服務,它只是暴露你的服務的defenition,由於.NET 2.0 nettcp你得到一個空的命名空間不明白,你需要basicHttpBinding的監守那是你的實際服務端點。
如果查看合同,您會發現mexHttpBinding的合同甚至不是"HBAcsNX.HBAccess"
,而是"IMetadataExchange".
您的配置不太一致.....
<service name="HBAcsNX.HBAccess"
behaviorConfiguration="HBAcsNX.HBAccessBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://localhost:8002/HBAccess/" />
</baseAddresses>
</host>
<endpoint address="mex"
binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
如果你把一切都考慮在內,你http://localhost:8002/HBAccess/
基地址,加上mex
從MEX終結- > http://localhost:8002/HBAccess/mex
但是在您的行為配置中,您為MEX使用了不同的地址:
<behavior name="HBAcsNX.HBAccessBehavior">
<serviceMetadata httpGetEnabled="true"
httpGetUrl="http://localhost:8002/HBAccess/help/mex" />
</behavior>
在這里,您指向http://localhost:8002/HBAccess/help/mex
注意其中的其他/help
。 現在到底是哪一個?
我建議扔掉服務行為配置中的顯式httpGetUrl-只需使用:
<behavior name="HBAcsNX.HBAccessBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
並且您應該能夠在http://localhost:8002/HBAccess/mex
獲取MEX。
渣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.