2011-05-24 84 views
3

我的WCF服務作爲Windows託管服務託管,所以我不確定我是否仍然可以使用netTcpBinding。我試過在MSDN上遵循一些指南,但出於某種原因,我的服務總是無法啓動,只要我從basicHttpBinding進行切換。也許還有其他步驟需要IIS以外的服務?我可以將netTcpBinding用於IIS以外託管的WCF服務嗎?

+0

你應該完全能夠做到這一點。你能分享相關的配置位嗎? – 2011-05-24 02:05:01

+0

netTcpBinding可用於Windows服務託管端點。你可以給我們更多的上下文(錯誤消息,服務定義信息等) – dlev 2011-05-24 02:05:10

+0

@Terry @dlev:我使用installutil.exe來啓動在VS2010之外運行的服務,所以我不確定如何獲取異常消息。這裏是我的app.config:http://pastebin.com/s3ibabxw – rafale 2011-05-24 02:09:52

回答

4

是的,你可以在IIS之外的netTcpBinding,Windows服務甚至控制檯應用程序中託管WCF服務。

下面是配置文件示例:

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
     <serviceMetadata /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <services> 
    <service behaviorConfiguration="ServiceBehavior" 
      name="XX.XX.Service"> 
     <endpoint address="" 
       binding="netTcpBinding" 
       bindingConfiguration="BindingConfiguration" 
       contract="XX.XX..IService" /> 
     <endpoint address="mex" 
       binding="mexTcpBinding" 
       contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8731/XXService" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
    <bindings> 
    <netTcpBinding> 
     <binding 
     name="BindingConfiguration"> 
     <security mode="None" /> 
     </binding> 
    </netTcpBinding> 
    </bindings> 
</system.serviceModel> 

[編輯]

問題與您的配置文件:

  • 基地址爲http來代替的net.tcp
  • 元數據端點是mexHttpBinding而不是metTcpBinding
  • 安全性 - 默認情況下將使用Windows授權,如果測試與框之間的通信,則可能有權限問題。我建議先從安全模式None開始,然後在其他所有工作時調整安全性。
  • 你不需要指定httpGetEnabled服務行爲
  • 如果你要使用的端口已在使用,您將無法啓動服務
2

你絕對可以和我甚至會說你應該。

這是你的問題:

<services> 
    <service name="Server.FileService" ... 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8000/Test/file"/> 
     </baseAddresses> 
     </host> 
     <endpoint address="" binding="netTcpBinding" contract="Server.IFile" /> 
     <endpoint address="mex" binding="mexHttpBinding" ... 

net.tcp地址必須有一個net.tcp://前綴,不是http://前綴。

我通常不會使用baseAddress所以不能給出建議。我刪除baseAddress,而使用

 <endpoint address="net.tcp://localhost:8001/Test/file" .. 

(請注意,我也將選擇另一個端口超過8000個)

相關問題