App.config命名空间问题

时间:2009-10-16 19:20:58

标签: c# .net wcf

我正在使用wsdl生成的界面,并且在尝试将我的服务作为Windows服务托管时遇到了问题。

界面上方显示以下行。除非我从

改变它
    [System.ServiceModel.ServiceContractAttribute(Namespace="http://xxxxxx.com/", ConfigurationName="IService")]

    [System.ServiceModel.ServiceContract]

我无法启动托管程序的Windows服务(事件查看器中的错误日志表示在Service实现的合同列表中找不到合同IService。)我列出了我的应用程序的端点。配置文件如下:

   endpoint address=""
              binding="basicHttpBinding"
              contract="Service.IService"

当我将合同更改为ServiceContractAttribute中显示的“http://xxxxxxx.com/IService”时,也会发生这种情况。关于如何解决这个问题的任何想法?

配置文件的服务部分:

<service name="Service.Service"
           behaviorConfiguration="myServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/Service"/>
      </baseAddresses>
    </host>
    <endpoint address=""
              binding="basicHttpBinding"
              contract="Service.IService" />
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="Service.IService" />

  </service>
<behaviors>
  <serviceBehaviors>
    <behavior name="myServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="True"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

3 个答案:

答案 0 :(得分:1)

config中端点元素的contract属性需要匹配代码中ServiceContractAttribute的ConfigurationName属性的值。所以在你的情况下,只需更改配置,使其读取contract =“IService”,你应该很好。

答案 1 :(得分:0)

似乎无法找到端点。您是否使用终端询问端点以查看它是否在提供的地址响应?

答案 2 :(得分:0)

“itowlson”最有可能在他的评论的正确轨道上 - 您的原始服务合同定义了配置名称:

[ServiceContract(Namespace="http://xxxxxx.com/", 
                 ConfigurationName="IService")]

但您的配置部分中没有此类服务配置。

尝试更改此内容:

<service name="Service.Service"

<service name="IService"

(或者,将ServiceContract更改为:

[ServiceContract(Namespace="http://xxxxxx.com/", 
                 ConfigurationName="Service.Service")]

这两个名字需要匹配!或者简单地从服务合同中省略配置名称:

[ServiceContract(Namespace="http://xxxxxx.com/")]

在这种情况下,将根据实际实现服务合同的服务类的Namespace.ServiceClassName模式找到服务配置。

无论哪种方式,您都需要确保ServiceContract属性和配置文件中的信息匹配。

马克