我正在使用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>
答案 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
属性和配置文件中的信息匹配。
马克