2011-01-07 74 views
7

我想添加一個WCF服務引用到我的Web應用程序使用VS2010。這似乎增加OK,但web.config中沒有更新,這意味着我得到一個運行時異常:當添加WCF服務引用,配置詳細信息不會添加到web.config

找不到默認端點 元素引用合同 「CoolService.CoolService」在 ServiceModel客戶端配置 部分。這可能是因爲沒有爲您的 應用程序找到 配置文件,或者因爲在客戶端元素中未找到匹配此合同的端點 元素 。

很明顯,因爲該服務沒有在我的web.config中定義。重現步驟:

  1. 右鍵單擊解決方案>添加>新建項目> ASP.NET空Web應用程序。
  2. 在新的Web應用程序>添加服務參考中右鍵單擊服務引用。
  3. 輸入我的服務地址,然後點擊開始。我的服務在左側的「服務」部分中可見,我可以看到它的所有操作。
  4. 爲我的服務鍵入一個名稱空間。
  5. 單擊確定。服務引用生成正確,我可以打開Reference.cs文件,並且它看起來都很好。
  6. 打開web.config文件。 它仍然是空的

    <system.web> 
        <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    
    
    <system.serviceModel> 
        <bindings /> 
        <client /> 
    </system.serviceModel> 
    

這究竟是爲什麼?它也發生在控制檯應用程序或我嘗試的任何其他項目類型中。任何幫助?

這是從我的WCF服務的app.config:

<?xml version="1.0"?> 

<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 

    <services> 

     <service name="CoolSQL.Server.WCF.CoolService"> 

     <endpoint address="" 
      binding="webHttpBinding" 
      contract="CoolSQL.Server.WCF.CoolService" 
      behaviorConfiguration="SilverlightFaultBehavior"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 

     <endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 

     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/CoolSQL.Server.WCF/CoolService/" /> 
      </baseAddresses> 
     </host> 

     </service> 

    </services> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webBehavior"> 
      <webHttp /> 
     </behavior> 
     <behavior name="SilverlightFaultBehavior"> 
      <silverlightFaults /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <bindings> 

     <webHttpBinding> 
     <binding name="DefaultBinding" 
      bypassProxyOnLocal="true" 
      useDefaultWebProxy="false" 
      hostNameComparisonMode="WeakWildcard" 
      sendTimeout="00:05:00" 
      openTimeout="00:05:00" 
      receiveTimeout="00:00:10" 
      maxReceivedMessageSize="2147483647" 
      transferMode="Streamed"> 
      <readerQuotas maxArrayLength="2147483647" 
      maxStringContentLength="2147483647" /> 
     </binding> 
     </webHttpBinding> 

    </bindings> 

    <extensions> 
     <behaviorExtensions> 
     <add name="silverlightFaults" 
      type="CoolSQL.Server.WCF.SilverlightFaultBehavior, CoolSQL.Server.WCF" /> 
     </behaviorExtensions> 
    </extensions> 

    <diagnostics> 
     <messageLogging logEntireMessage="true" 
     logMalformedMessages="false" 
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false" 
     maxMessagesToLog="3000" 
     maxSizeOfMessageToLog="2000" /> 
    </diagnostics> 

    </system.serviceModel> 

    <startup> 
    <supportedRuntime version="v4.0" 
     sku=".NETFramework,Version=v4.0" /> 
    </startup> 

    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" 
     switchValue="Information, ActivityTracing"> 
     <listeners> 
      <add name="messages" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="c:\messages.e2e" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

</configuration> 

回答

3

我發現瞭如何解決這個問題。我的WCF服務在其自己的項目中實現,並由同一解決方案中的單獨控制檯應用程序託管。如果我運行WCF服務作爲解決方案的啓動項目(例如,讓VS爲我託管),那麼添加引用可以正常工作,並且將正確的行添加到客戶端web.config中。但是,如果我在控制檯應用程序中託管服務,但仍可以添加引用,則客戶端的web.config不會被修改。因此,一種解決方法是首先讓VS託管服務,然後添加引用,然後在控制檯應用程序中更改要託管的服務(位於相同的地址和端口)。

這是令人驚訝的行爲,我很好奇,如果任何人都可以擺脫它的任何亮光?

+0

您的服務器端配置是在控制檯應用*和* WCF服務項目中嗎? – 2011-01-07 03:09:44

相關問題