我正在尝试使用VS2010向我的Web应用程序添加WCF服务引用。它似乎添加OK,但web.config没有更新,这意味着我得到了一个运行时异常:
无法找到默认端点 引用合同的元素 'CoolService.CoolService'中 ServiceModel客户端配置 部分。这可能是因为没有 找到了您的配置文件 应用程序,或因为没有端点 匹配此合同的元素可以 可以在客户端元素中找到。
显然,因为我的web.config中没有定义服务。重现的步骤:
打开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>
答案 0 :(得分:4)
我发现了如何解决这个问题。我的WCF服务在其自己的项目中实现,并由同一解决方案中的单独控制台应用程序托管。如果我将WCF服务作为解决方案的启动项目运行(例如,让VS为我托管),那么添加引用工作正常,并将正确的行添加到客户端web.config。但是如果我从我的控制台应用程序中托管服务,虽然我仍然可以添加引用,但客户端的web.config不会被修改。因此,解决方法是先让VS托管服务,然后添加引用,然后在控制台应用程序中更改要托管的服务(在同一地址和端口)。
这是令人惊讶的行为,我很好奇是否有人可以对此有所了解?