我按照此(http://msdn.microsoft.com/en-us/library/ms733069.aspx)链接创建了服务和服务主机。 我在解决方案中添加了一个webform客户端项目。为了检查我的服务是否正在接收请求,我在服务中添加了一个日志。 我通过设置多个启动项目选择我的主机和客户端同时运行。 但我在服务和客户端之间进行通信时遇到问题。我在配置中遗漏了什么?我根本没有看到异常(即使我选择了CLR和JSRuntime异常,并且管理调试协助)。
这是我的服务配置
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<client/>
<behaviors>
<serviceBehaviors>
<behavior name="meta">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="InboundMessage.Service.Operator" behaviorConfiguration="meta" >
<endpoint address="basic" binding="basicHttpBinding" contract="InboundMessage.Service.IOperator" name="basic"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<!--<endpoint address="" binding="wsHttpBinding" contract="IMetadataExchange" name="Ws" />-->
<host>
<baseAddresses>
<add baseAddress = "http://IP/InboundMessage.Service/"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="InboundMessage.Service.Operator"/>
</basicHttpBinding>
</bindings>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
服务主持人:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="meta">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<diagnostics performanceCounters="ServiceOnly" />
<services>
<service name="InboundMessage.Service.Operator" behaviorConfiguration="meta">
<endpoint address="basic" binding="basicHttpBinding" contract="InboundMessage.Service.IOperator" name="basic"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<!--<endpoint address="" binding="wsHttpBinding" contract="IMetadataExchange" />-->
</service>
</services>
</system.serviceModel>
<system.web>
<compilation
debug="true" >
</compilation>
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
一个windowform客户端配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<system.web>
<compilation debug="true"></compilation>
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="meta" name="InboundMessage.Service.Operator">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://IP/InboundMessage.Service/"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="InboundMessage.Service.Operator"/>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="meta">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
编辑: 使用Tim的评论来安装服务,但我在安装它时遇到问题。 我打开了另一个问题,谢谢蒂姆,我在本地机器上安装服务时遇到问题。我打开了另一个问题:Unable to install service using sc command
答案 0 :(得分:0)
我想到了一些事情。
首先(我不是100%肯定,但这是基于我的经验)你不能通过Visual Studio将Windows服务作为Windows服务运行。您需要构建项目,然后按照链接到的页面上的指示进行安装。
其次,您只需要两个配置文件,而不是三个 - 一个用于Windows服务(服务配置的位置),另一个用于客户端。我不确定您对服务主机配置文件有什么角色(或者您相信)。
第三,您的客户端配置包含<system.serviceModel>
部分中服务的条目 - 如果您的客户也在托管服务,您只需要这些条目,在您提出的问题中似乎不是这种情况问。您应该删除<services>
部分并添加<client>
部分,如下所示:
<client>
<endpoint address="http://IP/InboundMessage.Service"
binding="basicHttpBinding"
bindingConfiguration="InboundMessage.Service.Operator"
contract="InboundMessage.Service.IOperator" />
</client>
请注意,我使用了上面的bindingConfiguration
属性 - 没有这个,您的客户端将使用默认的basicHttpBinding
(在您的情况下,这将无关紧要,因为您没有设置除名称之外的任何内容,但是如果您设置了非默认值,则需要告诉客户端使用哪种绑定配置。
实际上,最简单的方法(入门)是构建Windows服务,安装并启动它,然后在客户端(WinForm)应用程序中添加服务引用。这将生成您需要的所有内容,您可以查看配置文件以查看所需的设置。