WCF Windows服务消耗Windows窗体中嵌入的服务

时间:2012-10-25 17:05:55

标签: c# wcf windows-services

我有一个带有WCF库的Windows服务。在同一台机器上,我有一个Windows窗体应用程序,其中嵌入了WCF服务。当我尝试从Windows服务中使用表单中的服务时出现问题。

Form中的WCF服务暴露了“basicHttpBinding”端点以及“mexHttpBinding”。我可以使用'WCF测试客户端'在表单中测试服务,没有任何问题。

在Windows服务中,我可以为表单的服务添加服务引用,一切都很顺利。但是,当我实际运行Windows服务,并尝试在窗体中使用WCF服务时,我收到此错误:

  

带有Action的消息'http://tempuri.org/IService1/shutMeDown'   由于ContractFilter不匹配,无法在接收方处理   在EndpointDispatcher。这可能是因为合同   不匹配(发送者和接收者之间的不匹配行为)或a   发送方和接收方之间的绑定/安全性不匹配。校验   发件人和收件人具有相同的合同和相同的约束力   (包括安全要求,例如消息,传输,无)。

在那里看到“IService1”?我很确定这是问题所在。 Windows服务本身配置为托管名为“Service1”的服务,如下面<services>部分所示。所以我的app.config似乎一定有问题。

我最好的猜测是我在app.config中设置<client>的方式有问题。看起来,出于某种原因,当我尝试使用表单中的服务时,Windows服务使用了错误的地址。它使用的是自己服务的地址,而不是表格服务的地址。

以下是我的Windows服务中app.config的相关部分:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFormControlService" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8700/FormControlService"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFormControlService"
        contract="Form_ServiceReference.IFormControlService" name="BasicHttpBinding_IFormControlService" />
    </client>
    <services>
      <service name="smMonitor_wcfServiceLibrary.Service1">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8800/smMonitorService/" />
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="smMonitor_wcfServiceLibrary.IService1">              
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>            
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>              
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

我的设置是这样的。我在计算机上运行Windows服务。在同一台机器上我有一个寡妇表格。 Windows窗体公开了一项允许Windows服务与之交互的服务。

1 个答案:

答案 0 :(得分:0)

我的问题如下。我只定义了传出的<bindings>。我需要做的是定义传入和传出绑定,如下所示:

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" />
            <binding name="BasicHttpBinding_IFormControlService" />
        </basicHttpBinding>
    </bindings>

由于未定义传出绑定,我的Windows服务正在查看<basicHttpBinding>并仅使用默认绑定。